!function(t, e) {
    "function" == typeof define && define.amd ? define([], e) : "object" == typeof module && module.exports ? module.exports = e() : t.echarts = e()
}(this, function() {
    var t, e;
    !function() {
        function i(t, e) {
            if (!e)
                return t;
            if (0 === t.indexOf(".")) {
                var i = e.split("/")
                  , n = t.split("/")
                  , r = i.length - 1
                  , a = n.length
                  , o = 0
                  , s = 0;
                t: for (var l = 0; a > l; l++)
                    switch (n[l]) {
                    case "..":
                        if (!(r > o))
                            break t;
                        o++,
                        s++;
                        break;
                    case ".":
                        s++;
                        break;
                    default:
                        break t
                    }
                return i.length = r - o,
                n = n.slice(s),
                i.concat(n).join("/")
            }
            return t
        }
        function n(t) {
            function e(e, o) {
                if ("string" == typeof e) {
                    var s = n[e];
                    return s || (s = a(i(e, t)),
                    n[e] = s),
                    s
                }
                e instanceof Array && (o = o || function() {}
                ,
                o.apply(this, r(e, o, t)))
            }
            var n = {};
            return e
        }
        function r(e, n, r) {
            for (var s = [], l = o[r], u = 0, c = Math.min(e.length, n.length); c > u; u++) {
                var h, d = i(e[u], r);
                switch (d) {
                case "require":
                    h = l && l.require || t;
                    break;
                case "exports":
                    h = l.exports;
                    break;
                case "module":
                    h = l;
                    break;
                default:
                    h = a(d)
                }
                s.push(h)
            }
            return s
        }
        function a(t) {
            var e = o[t];
            if (!e)
                throw new Error("No " + t);
            if (!e.defined) {
                var i = e.factory
                  , n = i.apply(this, r(e.deps || [], i, t));
                "undefined" != typeof n && (e.exports = n),
                e.defined = 1
            }
            return e.exports
        }
        var o = {};
        e = function(t, e, i) {
            o[t] = {
                id: t,
                deps: e,
                factory: i,
                defined: 0,
                exports: {},
                require: n(t)
            }
        }
        ,
        t = n("")
    }();
    var i = "buildPath"
      , n = "mousemove"
      , r = "../../util/number"
      , a = "orient"
      , o = "interval"
      , s = "horizontal"
      , l = "symbolSize"
      , u = "symbol"
      , c = "updateData"
      , h = "mapArray"
      , d = "radius"
      , f = "dataToCoord"
      , p = "getItemVisual"
      , m = "../../echarts"
      , v = "../../util/graphic"
      , g = "dataToPoint"
      , y = "ordinal"
      , x = "category"
      , _ = "getAxis"
      , b = "inverse"
      , w = "toFixed"
      , M = "middle"
      , S = "parsePercent"
      , C = "linearMap"
      , T = "getItemModel"
      , A = "setItemVisual"
      , z = "setShape"
      , L = "undefined"
      , k = "../core/util"
      , P = "getContext"
      , D = "createElement"
      , I = "eachItemGraphicEl"
      , O = "getItemGraphicEl"
      , R = "parent"
      , V = "getShallow"
      , B = "normal"
      , E = "emphasis"
      , Z = "setHoverStyle"
      , N = "stroke"
      , G = "lineWidth"
      , F = "applyTransform"
      , H = "concat"
      , W = "getComponent"
      , q = "ecModel"
      , j = "getName"
      , X = "getRawValue"
      , U = "dimensions"
      , Y = "distance"
      , $ = "getExtent"
      , K = "getLabel"
      , Q = "getTicks"
      , J = "create"
      , te = "contain"
      , ee = "../util/number"
      , ie = "opacity"
      , ne = "setStyle"
      , re = "position"
      , ae = "center"
      , oe = "getLayoutRect"
      , se = "getBoundingRect"
      , le = "getTextColor"
      , ue = "getFont"
      , ce = "textAlign"
      , he = "textStyle"
      , de = "coordinateSystem"
      , fe = "getRect"
      , pe = "removeAll"
      , me = "isString"
      , ve = "inherits"
      , ge = "number"
      , ye = "extendComponentView"
      , xe = "function"
      , _e = "indexOf"
      , be = "isArray"
      , we = "replace"
      , Me = "traverse"
      , Se = "zlevel"
      , Ce = "getDataParams"
      , Te = "seriesIndex"
      , Ae = "hostModel"
      , ze = "target"
      , Le = "mouseout"
      , ke = "mouseover"
      , Pe = "getData"
      , De = "dispose"
      , Ie = "series"
      , Oe = "eachSeries"
      , Re = "trigger"
      , Ve = "length"
      , Be = "defaults"
      , Ee = "dispatchAction"
      , Ze = "extend"
      , Ne = "remove"
      , Ge = "isObject"
      , Fe = "update"
      , He = "height"
      , We = "bottom"
      , qe = "ignore"
      , je = "eachComponent"
      , Xe = "backgroundColor"
      , Ue = "canvasSupported"
      , Ye = "getHeight"
      , $e = "getWidth"
      , Ke = "option"
      , Qe = "getModel"
      , Je = "resize"
      , ti = "canvas"
      , ei = "string"
      , ii = "prototype"
      , ni = "toLowerCase"
      , ri = "filter"
      , ai = "transform"
      , oi = "zrender/core/vector"
      , si = "zrender/core/util"
      , li = "require";
    e("echarts/echarts", [li, "./model/Global", "./ExtensionAPI", "./CoordinateSystem", "./model/OptionManager", "./model/Component", "./model/Series", "./view/Component", "./view/Chart", "./util/graphic", "zrender", si, "zrender/tool/color", "zrender/core/env", "zrender/mixin/Eventful", "./loading/default", "./visual/seriesColor", "./preprocessor/backwardCompat", "./util/number", "./util/format", "zrender/core/matrix", oi], function(t) {
        function e(t) {
            return function(e, i, n) {
                e = e && e[ni](),
                A[ii][t].call(this, e, i, n)
            }
        }
        function i() {
            A.call(this)
        }
        function n(t, e, n) {
            n = n || {},
            typeof e === ei && (e = G[e]),
            e && z(Z, function(t) {
                t(e)
            }),
            this.id,
            this.group,
            this._dom = t,
            this._zr = M.init(t, {
                renderer: n.renderer || ti,
                devicePixelRatio: n.devicePixelRatio
            }),
            this._theme = S.clone(e),
            this._chartsViews = [],
            this._chartsMap = {},
            this._componentsViews = [],
            this._componentsMap = {},
            this._api = new m(this),
            this._coordinateSystem = new v,
            A.call(this),
            this._messageCenter = new i,
            this._initEvents(),
            this[Je] = S.bind(this[Je], this)
        }
        function r(t, e) {
            var i = this._model;
            i && i[je]({
                mainType: "series",
                query: e
            }, function(n) {
                var r = this._chartsMap[n.__viewId];
                r && r.__alive && r[t](n, i, this._api, e)
            }, this)
        }
        function a(t, e, i) {
            var n = this._api;
            z(this._componentsViews, function(r) {
                var a = r.__model;
                r[t](a, e, n, i),
                d(a, r)
            }, this),
            e[Oe](function(r) {
                var a = this._chartsMap[r.__viewId];
                a[t](r, e, n, i),
                d(r, a)
            }, this)
        }
        function o(t, e) {
            for (var i = "component" === t, n = i ? this._componentsViews : this._chartsViews, r = i ? this._componentsMap : this._chartsMap, a = this._zr, o = 0; o < n[Ve]; o++)
                n[o].__alive = !1;
            e[i ? je : Oe](function(t, o) {
                if (i) {
                    if (t === Ie)
                        return
                } else
                    o = t;
                var s = o.id + "_" + o.type
                  , l = r[s];
                if (!l) {
                    var u = y.parseClassType(o.type)
                      , c = i ? _.getClass(u.main, u.sub) : b.getClass(u.sub);
                    if (!c)
                        return;
                    l = new c,
                    l.init(e, this._api),
                    r[s] = l,
                    n.push(l),
                    a.add(l.group)
                }
                o.__viewId = s,
                l.__alive = !0,
                l.__id = s,
                l.__model = o
            }, this);
            for (var o = 0; o < n[Ve]; ) {
                var s = n[o];
                s.__alive ? o++ : (a[Ne](s.group),
                s[De](e, this._api),
                n.splice(o, 1),
                delete r[s.__id])
            }
        }
        function s(t) {
            z(k, function(e) {
                z(E[e] || [], function(e) {
                    e(t)
                })
            })
        }
        function l(t) {
            var e = {};
            t[Oe](function(t) {
                var i = t.get("stack")
                  , n = t[Pe]();
                if (i && "list" === n.type) {
                    var r = e[i];
                    r && (n.stackedOn = r),
                    e[i] = n
                }
            })
        }
        function u(t, e) {
            var i = this._api;
            z(B, function(n) {
                n(t, i, e)
            })
        }
        function c(t, e) {
            z(L, function(i) {
                z(N[i] || [], function(i) {
                    i(t, e)
                })
            })
        }
        function h(t, e) {
            var i = this._api;
            z(this._componentsViews, function(n) {
                var r = n.__model;
                n.render(r, t, i, e),
                d(r, n)
            }, this),
            z(this._chartsViews, function(t) {
                t.__alive = !1
            }, this),
            t[Oe](function(n) {
                var r = this._chartsMap[n.__viewId];
                r.__alive = !0,
                r.render(n, t, i, e),
                d(n, r)
            }, this),
            z(this._chartsViews, function(e) {
                e.__alive || e[Ne](t, i)
            }, this)
        }
        function d(t, e) {
            var i = t.get("z")
              , n = t.get(Se);
            e.group[Me](function(t) {
                null != i && (t.z = i),
                null != n && (t[Se] = n)
            })
        }
        function f(t) {
            function e(t, e) {
                for (var i = 0; i < t[Ve]; i++) {
                    var n = t[i];
                    n[a] = e
                }
            }
            var i = 0
              , n = 1
              , r = 2
              , a = "__connectUpdateStatus";
            S.each(V, function(o, s) {
                t._messageCenter.on(s, function(o) {
                    if (H[t.group] && t[a] !== i) {
                        var s = t.makeActionFromEvent(o)
                          , l = [];
                        for (var u in F) {
                            var c = F[u];
                            c !== t && c.group === t.group && l.push(c)
                        }
                        e(l, i),
                        z(l, function(t) {
                            t[a] !== n && t[Ee](s)
                        }),
                        e(l, r)
                    }
                })
            })
        }
        var p = t("./model/Global")
          , m = t("./ExtensionAPI")
          , v = t("./CoordinateSystem")
          , g = t("./model/OptionManager")
          , y = t("./model/Component")
          , x = t("./model/Series")
          , _ = t("./view/Component")
          , b = t("./view/Chart")
          , w = t("./util/graphic")
          , M = t("zrender")
          , S = t(si)
          , C = t("zrender/tool/color")
          , T = t("zrender/core/env")
          , A = t("zrender/mixin/Eventful")
          , z = S.each
          , L = ["echarts", "chart", "component"]
          , k = [ai, ri, "statistic"];
        i[ii].on = e("on"),
        i[ii].off = e("off"),
        i[ii].one = e("one"),
        S.mixin(i, A);
        var P = n[ii];
        P.getDom = function() {
            return this._dom
        }
        ,
        P.getZr = function() {
            return this._zr
        }
        ,
        P.setOption = function(t, e, i) {
            (!this._model || e) && (this._model = new p(null,null,this._theme,new g(this._api))),
            this._model.setOption(t, Z),
            D.prepareAndUpdate.call(this),
            !i && this._zr.refreshImmediately()
        }
        ,
        P.setTheme = function() {
            console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
        }
        ,
        P[Qe] = function() {
            return this._model
        }
        ,
        P.getOption = function() {
            return S.clone(this._model[Ke])
        }
        ,
        P[$e] = function() {
            return this._zr[$e]()
        }
        ,
        P[Ye] = function() {
            return this._zr[Ye]()
        }
        ,
        P.getRenderedCanvas = function(t) {
            if (T[Ue]) {
                t = t || {},
                t.pixelRatio = t.pixelRatio || 1,
                t[Xe] = t[Xe] || this._model.get(Xe);
                var e = this._zr
                  , i = e.storage.getDisplayList();
                return S.each(i, function(t) {
                    t.stopAnimation(!0)
                }),
                e.painter.getRenderedCanvas(t)
            }
        }
        ,
        P.getDataURL = function(t) {
            t = t || {};
            var e = t.excludeComponents
              , i = this._model
              , n = []
              , r = this;
            z(e, function(t) {
                i[je]({
                    mainType: t
                }, function(t) {
                    var e = r._componentsMap[t.__viewId];
                    e.group[qe] || (n.push(e),
                    e.group[qe] = !0)
                })
            });
            var a = this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png"));
            return z(n, function(t) {
                t.group[qe] = !1
            }),
            a
        }
        ,
        P.getConnectedDataURL = function(t) {
            if (T[Ue]) {
                var e = this.group
                  , i = Math.min
                  , n = Math.max
                  , r = 1 / 0;
                if (H[e]) {
                    var a = r
                      , o = r
                      , s = -r
                      , l = -r
                      , u = []
                      , c = t && t.pixelRatio || 1;
                    for (var h in F) {
                        var d = F[h];
                        if (d.group === e) {
                            var f = d.getRenderedCanvas(S.clone(t))
                              , p = d.getDom().getBoundingClientRect();
                            a = i(p.left, a),
                            o = i(p.top, o),
                            s = n(p.right, s),
                            l = n(p[We], l),
                            u.push({
                                dom: f,
                                left: p.left,
                                top: p.top
                            })
                        }
                    }
                    a *= c,
                    o *= c,
                    s *= c,
                    l *= c;
                    var m = s - a
                      , v = l - o
                      , g = S.createCanvas();
                    g.width = m,
                    g[He] = v;
                    var y = M.init(g);
                    return z(u, function(t) {
                        var e = new w.Image({
                            style: {
                                x: t.left * c - a,
                                y: t.top * c - o,
                                image: t.dom
                            }
                        });
                        y.add(e)
                    }),
                    y.refreshImmediately(),
                    g.toDataURL("image/" + (t && t.type || "png"))
                }
                return this.getDataURL(t)
            }
        }
        ;
        var D = {
            update: function(t) {
                var e = this._model;
                if (e) {
                    e.restoreData(),
                    s.call(this, e),
                    l.call(this, e),
                    this._coordinateSystem[Fe](e, this._api),
                    u.call(this, e, t),
                    c.call(this, e, t),
                    h.call(this, e, t);
                    var i = e.get(Xe) || "transparent"
                      , n = this._zr.painter;
                    if (n.isSingleCanvas && n.isSingleCanvas())
                        this._zr.configLayer(0, {
                            clearColor: i
                        });
                    else {
                        if (!T[Ue]) {
                            var r = C.parse(i);
                            i = C.stringify(r, "rgb"),
                            0 === r[3] && (i = "transparent")
                        }
                        i = i,
                        this._dom.style[Xe] = i
                    }
                }
            },
            updateView: function(t) {
                var e = this._model;
                e && (u.call(this, e, t),
                c.call(this, e, t),
                a.call(this, "updateView", e, t))
            },
            updateVisual: function(t) {
                var e = this._model;
                e && (c.call(this, e, t),
                a.call(this, "updateVisual", e, t))
            },
            updateLayout: function(t) {
                var e = this._model;
                e && (u.call(this, e, t),
                a.call(this, "updateLayout", e, t))
            },
            highlight: function(t) {
                r.call(this, "highlight", t)
            },
            downplay: function(t) {
                r.call(this, "downplay", t)
            },
            prepareAndUpdate: function(t) {
                var e = this._model;
                o.call(this, "component", e),
                o.call(this, "chart", e),
                D[Fe].call(this, t)
            }
        };
        P[Je] = function() {
            this._zr[Je]();
            var t = this._model && this._model.resetOption("media");
            D[t ? "prepareAndUpdate" : Fe].call(this),
            this._loadingFX && this._loadingFX[Je]()
        }
        ;
        var I = t("./loading/default");
        P.showLoading = function(t, e) {
            S[Ge](t) && (e = t,
            t = "default");
            var i = I(this._api, e)
              , n = this._zr;
            this._loadingFX = i,
            n.add(i)
        }
        ,
        P.hideLoading = function() {
            this._loadingFX && this._zr[Ne](this._loadingFX),
            this._loadingFX = null
        }
        ,
        P.makeActionFromEvent = function(t) {
            var e = S[Ze]({}, t);
            return e.type = V[t.type],
            e
        }
        ,
        P[Ee] = function(t, e) {
            var i = R[t.type];
            if (i) {
                var n = i.actionInfo
                  , r = n[Fe] || Fe
                  , a = [t]
                  , o = !1;
                t.batch && (o = !0,
                a = S.map(t.batch, function(e) {
                    return e = S[Be](S[Ze]({}, e), t),
                    e.batch = null,
                    e
                }));
                for (var s, l = [], u = "highlight" === t.type || "downplay" === t.type, c = 0; c < a[Ve]; c++) {
                    var h = a[c];
                    s = i.action(h, this._model),
                    s = s || S[Ze]({}, h),
                    s.type = n.event || s.type,
                    l.push(s),
                    u && D[r].call(this, h)
                }
                "none" !== r && !u && D[r].call(this, t),
                e || (s = o ? {
                    type: l[0].type,
                    batch: l
                } : l[0],
                this._messageCenter[Re](s.type, s))
            }
        }
        ,
        P.on = e("on"),
        P.off = e("off"),
        P.one = e("one");
        var O = ["click", "dblclick", ke, Le, "globalout"];
        P._initEvents = function() {
            var t = this._zr;
            z(O, function(e) {
                t.on(e, function(t) {
                    var i = this[Qe]()
                      , n = t[ze];
                    if (n && null != n.dataIndex) {
                        var r = n[Ae] || i.getSeriesByIndex(n[Te])
                          , a = r && r[Ce](n.dataIndex) || {};
                        a.event = t,
                        a.type = e,
                        this[Re](e, a)
                    }
                }, this)
            }, this),
            z(V, function(t, e) {
                this._messageCenter.on(e, function(t) {
                    this[Re](e, t)
                }, this)
            }, this)
        }
        ,
        P.isDisposed = function() {
            return this._disposed
        }
        ,
        P.clear = function() {
            this.setOption({}, !0)
        }
        ,
        P[De] = function() {
            this._disposed = !0;
            var t = this._api
              , e = this._model;
            z(this._componentsViews, function(i) {
                i[De](e, t)
            }),
            z(this._chartsViews, function(i) {
                i[De](e, t)
            }),
            this._zr[De](),
            F[this.id] = null
        }
        ,
        S.mixin(n, A);
        var R = []
          , V = {}
          , B = []
          , E = {}
          , Z = []
          , N = {}
          , G = {}
          , F = {}
          , H = {}
          , W = new Date - 0
          , q = new Date - 0
          , j = "_echarts_instance_"
          , X = {
            version: "3.1.1",
            dependencies: {
                zrender: "3.0.2"
            }
        };
        return X.init = function(t, e, i) {
            if (M.version[we](".", "") - 0 < X.dependencies.zrender[we](".", "") - 0)
                throw new Error("ZRender " + M.version + " is too old for ECharts " + X.version + ". Current version need ZRender " + X.dependencies.zrender + "+");
            if (!t)
                throw new Error("Initialize failed: invalid dom.");
            var r = new n(t,e,i);
            return r.id = "ec_" + W++,
            F[r.id] = r,
            t.setAttribute && t.setAttribute(j, r.id),
            f(r),
            r
        }
        ,
        X.connect = function(t) {
            if (S[be](t)) {
                var e = t;
                t = null,
                S.each(e, function(e) {
                    null != e.group && (t = e.group)
                }),
                t = t || "g_" + q++,
                S.each(e, function(e) {
                    e.group = t
                })
            }
            return H[t] = !0,
            t
        }
        ,
        X.disConnect = function(t) {
            H[t] = !1
        }
        ,
        X[De] = function(t) {
            S.isDom(t) ? t = X.getInstanceByDom(t) : typeof t === ei && (t = F[t]),
            t instanceof n && !t.isDisposed() && t[De]()
        }
        ,
        X.getInstanceByDom = function(t) {
            var e = t.getAttribute(j);
            return F[e]
        }
        ,
        X.getInstanceById = function(t) {
            return F[t]
        }
        ,
        X.registerTheme = function(t, e) {
            G[t] = e
        }
        ,
        X.registerPreprocessor = function(t) {
            Z.push(t)
        }
        ,
        X.registerProcessor = function(t, e) {
            if (S[_e](k, t) < 0)
                throw new Error("stage should be one of " + k);
            var i = E[t] || (E[t] = []);
            i.push(e)
        }
        ,
        X.registerAction = function(t, e, i) {
            typeof e === xe && (i = e,
            e = "");
            var n = S[Ge](t) ? t.type : [t, t = {
                event: e
            }][0];
            t.event = (t.event || n)[ni](),
            e = t.event,
            R[n] || (R[n] = {
                action: i,
                actionInfo: t
            }),
            V[e] = n
        }
        ,
        X.registerCoordinateSystem = function(t, e) {
            v.register(t, e)
        }
        ,
        X.registerLayout = function(t) {
            S[_e](B, t) < 0 && B.push(t)
        }
        ,
        X.registerVisualCoding = function(t, e) {
            if (S[_e](L, t) < 0)
                throw new Error("stage should be one of " + L);
            var i = N[t] || (N[t] = []);
            i.push(e)
        }
        ,
        X.extendChartView = function(t) {
            return b[Ze](t)
        }
        ,
        X.extendComponentModel = function(t) {
            return y[Ze](t)
        }
        ,
        X.extendSeriesModel = function(t) {
            return x[Ze](t)
        }
        ,
        X[ye] = function(t) {
            return _[Ze](t)
        }
        ,
        X.setCanvasCreator = function(t) {
            S.createCanvas = t
        }
        ,
        X.registerVisualCoding("echarts", S.curry(t("./visual/seriesColor"), "", "itemStyle")),
        X.registerPreprocessor(t("./preprocessor/backwardCompat")),
        X.registerAction({
            type: "highlight",
            event: "highlight",
            update: "highlight"
        }, S.noop),
        X.registerAction({
            type: "downplay",
            event: "downplay",
            update: "downplay"
        }, S.noop),
        X.graphic = t("./util/graphic"),
        X[ge] = t("./util/number"),
        X.format = t("./util/format"),
        X.matrix = t("zrender/core/matrix"),
        X.vector = t(oi),
        X.util = {},
        z(["map", "each", ri, _e, ve, "reduce", ri, "bind", "curry", be, me, Ge, "isFunction", Ze], function(t) {
            X.util[t] = S[t]
        }),
        X
    }),
    e("echarts/chart/bar", [li, si, "../coord/cartesian/Grid", "./bar/BarSeries", "./bar/BarView", "../layout/barGrid", "../echarts"], function(t) {
        var e = t(si);
        t("../coord/cartesian/Grid"),
        t("./bar/BarSeries"),
        t("./bar/BarView");
        var i = t("../layout/barGrid")
          , n = t("../echarts");
        n.registerLayout(e.curry(i, "bar")),
        n.registerVisualCoding("chart", function(t) {
            t.eachSeriesByType("bar", function(t) {
                var e = t[Pe]();
                e.setVisual("legendSymbol", "roundRect")
            })
        })
    }),
    e("echarts/component/grid", [li, "../util/graphic", si, "../coord/cartesian/Grid", "./axis", "../echarts"], function(t) {
        var e = t("../util/graphic")
          , i = t(si);
        t("../coord/cartesian/Grid"),
        t("./axis"),
        t("../echarts")[ye]({
            type: "grid",
            render: function(t) {
                this.group[pe](),
                t.get("show") && this.group.add(new e.Rect({
                    shape: t[de][fe](),
                    style: i[Be]({
                        fill: t.get(Xe)
                    }, t.getItemStyle()),
                    silent: !0
                }))
            }
        })
    }),
    e("echarts/chart/line", [li, si, "../echarts", "./line/LineSeries", "./line/LineView", "../visual/symbol", "../layout/points"], function(t) {
        var e = t(si)
          , i = t("../echarts");
        t("./line/LineSeries"),
        t("./line/LineView"),
        i.registerVisualCoding("chart", e.curry(t("../visual/symbol"), "line", "circle", "line")),
        i.registerLayout(e.curry(t("../layout/points"), "line"))
    }),
    e("echarts/component/title", [li, "../echarts", "../util/graphic", "../util/layout"], function(t) {
        var e = t("../echarts")
          , i = t("../util/graphic")
          , n = t("../util/layout");
        e.extendComponentModel({
            type: "title",
            defaultOption: {
                zlevel: 0,
                z: 6,
                show: !0,
                text: "",
                target: "blank",
                subtext: "",
                subtarget: "blank",
                left: "left",
                top: "top",
                backgroundColor: "rgba(0,0,0,0)",
                borderColor: "#ccc",
                borderWidth: 0,
                padding: 5,
                itemGap: 10,
                textStyle: {
                    fontSize: 18,
                    fontWeight: "bolder",
                    color: "#333"
                },
                subtextStyle: {
                    color: "#aaa"
                }
            }
        }),
        e[ye]({
            type: "title",
            render: function(t, e, r) {
                if (this.group[pe](),
                t.get("show")) {
                    var a = this.group
                      , o = t[Qe](he)
                      , s = t[Qe]("subtextStyle")
                      , l = t.get(ce)
                      , u = new i.Text({
                        style: {
                            text: t.get("text"),
                            textFont: o[ue](),
                            fill: o[le](),
                            textBaseline: "top"
                        },
                        z2: 10
                    })
                      , c = u[se]()
                      , h = t.get("subtext")
                      , d = new i.Text({
                        style: {
                            text: h,
                            textFont: s[ue](),
                            fill: s[le](),
                            y: c[He] + t.get("itemGap"),
                            textBaseline: "top"
                        },
                        z2: 10
                    })
                      , f = t.get("link")
                      , p = t.get("sublink");
                    u.silent = !f,
                    d.silent = !p,
                    f && u.on("click", function() {
                        window.open(f, t.get(ze))
                    }),
                    p && d.on("click", function() {
                        window.open(p, t.get("subtarget"))
                    }),
                    a.add(u),
                    h && a.add(d);
                    var m = a[se]()
                      , v = t.getBoxLayoutParams();
                    v.width = m.width,
                    v[He] = m[He];
                    var g = n[oe](v, {
                        width: r[$e](),
                        height: r[Ye]()
                    }, t.get("padding"));
                    if (!l) {
                        var y = g.x / r[$e]()
                          , x = (g.x + g.width) / r[$e]();
                        .2 > y ? l = "left" : x > .8 ? (g.x += g.width,
                        l = "right") : (g.x += g.width / 2,
                        l = ae)
                    }
                    a[re] = [g.x, g.y],
                    u[ne](ce, l),
                    d[ne](ce, l),
                    m = a[se]();
                    var _ = g.margin
                      , b = t.getItemStyle(["color", ie]);
                    b.fill = t.get(Xe);
                    var w = new i.Rect({
                        shape: {
                            x: m.x - _[3],
                            y: m.y - _[0],
                            width: m.width + _[1] + _[3],
                            height: m[He] + _[0] + _[2]
                        },
                        style: b,
                        silent: !0
                    });
                    i.subPixelOptimizeRect(w),
                    a.add(w)
                }
            }
        })
    }),
    e("echarts/chart/heatmap", [li, "./heatmap/HeatmapSeries", "./heatmap/HeatmapView"], function(t) {
        t("./heatmap/HeatmapSeries"),
        t("./heatmap/HeatmapView")
    }),
    e("echarts/component/legend", [li, "./legend/LegendModel", "./legend/legendAction", "./legend/LegendView", "../echarts", "./legend/legendFilter"], function(t) {
        t("./legend/LegendModel"),
        t("./legend/legendAction"),
        t("./legend/LegendView");
        var e = t("../echarts");
        e.registerProcessor(ri, t("./legend/legendFilter"))
    }),
    e("echarts/component/markLine", [li, "./marker/MarkLineModel", "./marker/MarkLineView", "../echarts"], function(t) {
        t("./marker/MarkLineModel"),
        t("./marker/MarkLineView"),
        t("../echarts").registerPreprocessor(function(t) {
            t.markLine = t.markLine || {}
        })
    }),
    e("echarts/component/tooltip", [li, "./tooltip/TooltipModel", "./tooltip/TooltipView", "../echarts"], function(t) {
        t("./tooltip/TooltipModel"),
        t("./tooltip/TooltipView"),
        t("../echarts").registerAction({
            type: "showTip",
            event: "showTip",
            update: "none"
        }, function() {}),
        t("../echarts").registerAction({
            type: "hideTip",
            event: "hideTip",
            update: "none"
        }, function() {})
    }),
    e("echarts/component/markPoint", [li, "./marker/MarkPointModel", "./marker/MarkPointView", "../echarts"], function(t) {
        t("./marker/MarkPointModel"),
        t("./marker/MarkPointView"),
        t("../echarts").registerPreprocessor(function(t) {
            t.markPoint = t.markPoint || {}
        })
    }),
    e("echarts/component/visualMap", [li, "./visualMapContinuous", "./visualMapPiecewise"], function(t) {
        t("./visualMapContinuous"),
        t("./visualMapPiecewise")
    }),
    e("echarts/component/dataZoom", [li, "./dataZoom/typeDefaulter", "./dataZoom/DataZoomModel", "./dataZoom/DataZoomView", "./dataZoom/SliderZoomModel", "./dataZoom/SliderZoomView", "./dataZoom/InsideZoomModel", "./dataZoom/InsideZoomView", "./dataZoom/dataZoomProcessor", "./dataZoom/dataZoomAction"], function(t) {
        t("./dataZoom/typeDefaulter"),
        t("./dataZoom/DataZoomModel"),
        t("./dataZoom/DataZoomView"),
        t("./dataZoom/SliderZoomModel"),
        t("./dataZoom/SliderZoomView"),
        t("./dataZoom/InsideZoomModel"),
        t("./dataZoom/InsideZoomView"),
        t("./dataZoom/dataZoomProcessor"),
        t("./dataZoom/dataZoomAction")
    }),
    e("zrender/vml/vml", [li, "./graphic", "../zrender", "./Painter"], function(t) {
        t("./graphic"),
        t("../zrender").registerPainter("vml", t("./Painter"))
    }),
    e("echarts/scale/Time", [li, si, ee, "../util/format", "./Interval"], function(t) {
        var e = t(si)
          , i = t(ee)
          , n = t("../util/format")
          , r = t("./Interval")
          , a = r[ii]
          , o = Math.ceil
          , s = Math.floor
          , l = 864e5
          , u = function(t, e, i, n) {
            for (; n > i; ) {
                var r = i + n >>> 1;
                t[r][2] < e ? i = r + 1 : n = r
            }
            return i
        }
          , c = r[Ze]({
            type: "time",
            getLabel: function(t) {
                var e = this._stepLvl
                  , i = new Date(t);
                return n.formatTime(e[0], i)
            },
            niceExtent: function(t, e, n) {
                var r = this._extent;
                if (r[0] === r[1] && (r[0] -= l,
                r[1] += l),
                r[1] === -1 / 0 && 1 / 0 === r[0]) {
                    var a = new Date;
                    r[1] = new Date(a.getFullYear(),a.getMonth(),a.getDate()),
                    r[0] = r[1] - l
                }
                this.niceTicks(t, e, n);
                var u = this._interval;
                e || (r[0] = i.round(s(r[0] / u) * u)),
                n || (r[1] = i.round(o(r[1] / u) * u))
            },
            niceTicks: function(t) {
                t = t || 10;
                var e = this._extent
                  , i = e[1] - e[0]
                  , n = i / t
                  , r = h[Ve]
                  , a = u(h, n, 0, r)
                  , l = h[Math.min(a, r - 1)]
                  , c = l[2]
                  , d = [o(e[0] / c) * c, s(e[1] / c) * c];
                this._stepLvl = l,
                this._interval = c,
                this._niceExtent = d
            },
            parse: function(t) {
                return +i.parseDate(t)
            }
        });
        e.each([te, "normalize"], function(t) {
            c[ii][t] = function(e) {
                return a[t].call(this, this.parse(e))
            }
        });
        var h = [["hh:mm:ss", 1, 1e3], ["hh:mm:ss", 5, 5e3], ["hh:mm:ss", 10, 1e4], ["hh:mm:ss", 15, 15e3], ["hh:mm:ss", 30, 3e4], ["hh:mm\nMM-dd", 1, 6e4], ["hh:mm\nMM-dd", 5, 3e5], ["hh:mm\nMM-dd", 10, 6e5], ["hh:mm\nMM-dd", 15, 9e5], ["hh:mm\nMM-dd", 30, 18e5], ["hh:mm\nMM-dd", 1, 36e5], ["hh:mm\nMM-dd", 2, 72e5], ["hh:mm\nMM-dd", 6, 216e5], ["hh:mm\nMM-dd", 12, 432e5], ["MM-dd\nyyyy", 1, l], ["week", 7, 7 * l], ["month", 1, 31 * l], ["quarter", 3, 380 * l / 4], ["half-year", 6, 380 * l / 2], ["year", 1, 380 * l]];
        return c[J] = function() {
            return new c
        }
        ,
        c
    }),
    e("echarts/component/toolbox", [li, "./toolbox/ToolboxModel", "./toolbox/ToolboxView", "./toolbox/feature/SaveAsImage", "./toolbox/feature/MagicType", "./toolbox/feature/DataView", "./toolbox/feature/DataZoom", "./toolbox/feature/Restore"], function(t) {
        t("./toolbox/ToolboxModel"),
        t("./toolbox/ToolboxView"),
        t("./toolbox/feature/SaveAsImage"),
        t("./toolbox/feature/MagicType"),
        t("./toolbox/feature/DataView"),
        t("./toolbox/feature/DataZoom"),
        t("./toolbox/feature/Restore")
    }),
    e("echarts/scale/Log", [li, si, "./Scale", ee, "./Interval"], function(t) {
        var e = t(si)
          , i = t("./Scale")
          , n = t(ee)
          , r = t("./Interval")
          , a = i[ii]
          , o = r[ii]
          , s = Math.floor
          , l = Math.ceil
          , u = Math.pow
          , c = 10
          , h = Math.log
          , d = i[Ze]({
            type: "log",
            getTicks: function() {
                return e.map(o[Q].call(this), function(t) {
                    return n.round(u(c, t))
                })
            },
            getLabel: o[K],
            scale: function(t) {
                return t = a.scale.call(this, t),
                u(c, t)
            },
            setExtent: function(t, e) {
                t = h(t) / h(c),
                e = h(e) / h(c),
                o.setExtent.call(this, t, e)
            },
            getExtent: function() {
                var t = a[$].call(this);
                return t[0] = u(c, t[0]),
                t[1] = u(c, t[1]),
                t
            },
            unionExtent: function(t) {
                t[0] = h(t[0]) / h(c),
                t[1] = h(t[1]) / h(c),
                a.unionExtent.call(this, t)
            },
            niceTicks: function(t) {
                t = t || 10;
                var e = this._extent
                  , i = e[1] - e[0];
                if (!(1 / 0 === i || 0 >= i)) {
                    var r = u(10, s(h(i / t) / Math.LN10))
                      , a = t / i * r;
                    .5 >= a && (r *= 10);
                    var o = [n.round(l(e[0] / r) * r), n.round(s(e[1] / r) * r)];
                    this._interval = r,
                    this._niceExtent = o
                }
            },
            niceExtent: o.niceExtent
        });
        return e.each([te, "normalize"], function(t) {
            d[ii][t] = function(e) {
                return e = h(e) / h(c),
                a[t].call(this, e)
            }
        }),
        d[J] = function() {
            return new d
        }
        ,
        d
    }),
    e("echarts/model/Global", [li, si, "../util/model", "./Model", "./Component", "./globalDefault"], function(t) {
        function e(t, e) {
            for (var i in e)
                y.hasClass(i) || (t[i] = "object" == typeof e[i] ? t[i] ? u.merge(t[i], e[i], !1) : u.clone(e[i]) : e[i])
        }
        function i(t) {
            t = t,
            this[Ke] = {},
            this._componentsMap = {},
            this._seriesIndices = null,
            e(t, this._theme[Ke]),
            u.merge(t, x, !1),
            this.mergeOption(t)
        }
        function n(t, e) {
            u[be](e) || (e = e ? [e] : []);
            var i = {};
            return d(e, function(e) {
                i[e] = (t[e] || []).slice()
            }),
            i
        }
        function r(t, e) {
            var i = {};
            d(e, function(e) {
                var n = e.exist
                  , r = e[Ke];
                if (u.assert(!r || null == r.id || !i[r.id], "id duplicates: " + (r && r.id)),
                n && (i[n.id] = e),
                r && (i[r.id] = e),
                g(r)) {
                    var o = a(t, r, n);
                    e.keyInfo = {
                        mainType: t,
                        subType: o
                    }
                }
            }),
            d(e, function(t) {
                var e = t.exist
                  , n = t[Ke]
                  , r = t.keyInfo;
                if (g(n)) {
                    if (r.name = null != n.name ? n.name + "" : e ? e.name : "\x00-",
                    e)
                        r.id = e.id;
                    else if (null != n.id)
                        r.id = n.id + "";
                    else {
                        var a = 0;
                        do
                            r.id = "\x00" + r.name + "\x00" + a++;
                        while (i[r.id])
                    }
                    i[r.id] = t
                }
            })
        }
        function a(t, e, i) {
            var n = e.type ? e.type : i ? i.subType : y.determineSubType(t, e);
            return n
        }
        function o(t) {
            return p(t, function(t) {
                return t.componentIndex
            }) || []
        }
        function s(t, e) {
            return e.hasOwnProperty("subType") ? f(t, function(t) {
                return t.subType === e.subType
            }) : t
        }
        function l(t) {
            if (!t._seriesIndices)
                throw new Error("Series is not initialized. Please depends sereis.")
        }
        var u = t(si)
          , c = t("../util/model")
          , h = t("./Model")
          , d = u.each
          , f = u[ri]
          , p = u.map
          , m = u[be]
          , v = u[_e]
          , g = u[Ge]
          , y = t("./Component")
          , x = t("./globalDefault")
          , _ = h[Ze]({
            constructor: _,
            init: function(t, e, i, n) {
                i = i || {},
                this[Ke] = null,
                this._theme = new h(i),
                this._optionManager = n
            },
            setOption: function(t, e) {
                this._optionManager.setOption(t, e),
                this.resetOption()
            },
            resetOption: function(t) {
                var e = !1
                  , n = this._optionManager;
                if (!t || "recreate" === t) {
                    var r = n.mountOption("recreate" === t);
                    this[Ke] && "recreate" !== t ? (this.restoreData(),
                    this.mergeOption(r)) : i.call(this, r),
                    e = !0
                }
                if (("timeline" === t || "media" === t) && this.restoreData(),
                !t || "recreate" === t || "timeline" === t) {
                    var a = n.getTimelineOption(this);
                    a && (this.mergeOption(a),
                    e = !0)
                }
                if (!t || "recreate" === t || "media" === t) {
                    var o = n.getMediaOption(this, this._api);
                    o[Ve] && d(o, function(t) {
                        this.mergeOption(t, e = !0)
                    }, this)
                }
                return e
            },
            mergeOption: function(t) {
                function e(e, s) {
                    var l = t[e];
                    u[be](l) || (l = l ? [l] : []);
                    var h = c.mappingToExists(a[e], l);
                    r(e, h);
                    var f = n(a, s);
                    i[e] = [],
                    a[e] = [],
                    d(h, function(t, n) {
                        var r = t.exist
                          , o = t[Ke];
                        if (u.assert(g(o) || r, "Empty component definition"),
                        o) {
                            var s = y.getClass(e, t.keyInfo.subType, !0);
                            r && r instanceof s ? r.mergeOption(o, this) : r = new s(o,this,this,u[Ze]({
                                dependentModels: f,
                                componentIndex: n
                            }, t.keyInfo))
                        } else
                            r.mergeOption({}, this);
                        a[e][n] = r,
                        i[e][n] = r[Ke]
                    }, this),
                    e === Ie && (this._seriesIndices = o(a[Ie]))
                }
                var i = this[Ke]
                  , a = this._componentsMap
                  , s = [];
                d(t, function(t, e) {
                    null != t && (y.hasClass(e) ? s.push(e) : i[e] = null == i[e] ? u.clone(t) : u.merge(i[e], t, !0))
                }),
                y.topologicalTravel(s, y.getAllClassMainTypes(), e, this)
            },
            getTheme: function() {
                return this._theme
            },
            getComponent: function(t, e) {
                var i = this._componentsMap[t];
                return i ? i[e || 0] : void 0
            },
            queryComponents: function(t) {
                var e = t.mainType;
                if (!e)
                    return [];
                var i = t.index
                  , n = t.id
                  , r = t.name
                  , a = this._componentsMap[e];
                if (!a || !a[Ve])
                    return [];
                var o;
                if (null != i)
                    m(i) || (i = [i]),
                    o = f(p(i, function(t) {
                        return a[t]
                    }), function(t) {
                        return !!t
                    });
                else if (null != n) {
                    var l = m(n);
                    o = f(a, function(t) {
                        return l && v(n, t.id) >= 0 || !l && t.id === n
                    })
                } else if (null != r) {
                    var u = m(r);
                    o = f(a, function(t) {
                        return u && v(r, t.name) >= 0 || !u && t.name === r
                    })
                }
                return s(o, t)
            },
            findComponents: function(t) {
                function e(t) {
                    var e = r + "Index"
                      , i = r + "Id"
                      , n = r + "Name";
                    return t && (t.hasOwnProperty(e) || t.hasOwnProperty(i) || t.hasOwnProperty(n)) ? {
                        mainType: r,
                        index: t[e],
                        id: t[i],
                        name: t[n]
                    } : null
                }
                function i(e) {
                    return t[ri] ? f(e, t[ri]) : e
                }
                var n = t.query
                  , r = t.mainType
                  , a = e(n)
                  , o = a ? this.queryComponents(a) : this._componentsMap[r];
                return i(s(o, t))
            },
            eachComponent: function(t, e, i) {
                var n = this._componentsMap;
                if (typeof t === xe)
                    i = e,
                    e = t,
                    d(n, function(t, n) {
                        d(t, function(t, r) {
                            e.call(i, n, t, r)
                        })
                    });
                else if (u[me](t))
                    d(n[t], e, i);
                else if (g(t)) {
                    var r = this.findComponents(t);
                    d(r, e, i)
                }
            },
            getSeriesByName: function(t) {
                var e = this._componentsMap[Ie];
                return f(e, function(e) {
                    return e.name === t
                })
            },
            getSeriesByIndex: function(t) {
                return this._componentsMap[Ie][t]
            },
            getSeriesByType: function(t) {
                var e = this._componentsMap[Ie];
                return f(e, function(e) {
                    return e.subType === t
                })
            },
            getSeries: function() {
                return this._componentsMap[Ie].slice()
            },
            eachSeries: function(t, e) {
                l(this),
                d(this._seriesIndices, function(i) {
                    var n = this._componentsMap[Ie][i];
                    t.call(e, n, i)
                }, this)
            },
            eachRawSeries: function(t, e) {
                d(this._componentsMap[Ie], t, e)
            },
            eachSeriesByType: function(t, e, i) {
                l(this),
                d(this._seriesIndices, function(n) {
                    var r = this._componentsMap[Ie][n];
                    r.subType === t && e.call(i, r, n)
                }, this)
            },
            eachRawSeriesByType: function(t, e, i) {
                return d(this.getSeriesByType(t), e, i)
            },
            isSeriesFiltered: function(t) {
                return l(this),
                u[_e](this._seriesIndices, t.componentIndex) < 0
            },
            filterSeries: function(t, e) {
                l(this);
                var i = f(this._componentsMap[Ie], t, e);
                this._seriesIndices = o(i)
            },
            restoreData: function() {
                var t = this._componentsMap;
                this._seriesIndices = o(t[Ie]);
                var e = [];
                d(t, function(t, i) {
                    e.push(i)
                }),
                y.topologicalTravel(e, y.getAllClassMainTypes(), function(e) {
                    d(t[e], function(t) {
                        t.restoreData()
                    })
                })
            }
        });
        return _
    }),
    e("echarts/CoordinateSystem", [li], function() {
        function t() {
            this._coordinateSystems = {},
            this._coordinateSystemsList = []
        }
        var e = {};
        return t[ii] = {
            constructor: t,
            update: function(t, i) {
                var n = {};
                for (var r in e)
                    n[r] = e[r][J](t, i);
                this._coordinateSystems = n
            },
            get: function(t, e) {
                var i = this._coordinateSystems[t];
                return i ? i[e || 0] : void 0
            }
        },
        t.register = function(t, i) {
            e[t] = i
        }
        ,
        t.get = function(t) {
            return e[t]
        }
        ,
        t
    }),
    e("echarts/model/Series", [li, si, "../util/format", "../util/model", "./Component"], function(t) {
        var e = t(si)
          , i = t("../util/format")
          , n = t("../util/model")
          , r = t("./Component")
          , a = i.encodeHTML
          , o = i.addCommas
          , s = r[Ze]({
            type: "series",
            seriesIndex: 0,
            coordinateSystem: null,
            defaultOption: null,
            legendDataProvider: null,
            init: function(t, e, i) {
                this[Te] = this.componentIndex,
                this.mergeDefaultAndTheme(t, i),
                this._dataBeforeProcessed = this.getInitialData(t, i),
                this._data = this._dataBeforeProcessed.cloneShallow()
            },
            mergeDefaultAndTheme: function(t, i) {
                e.merge(t, i.getTheme().get(this.subType)),
                e.merge(t, this.getDefaultOption()),
                n.defaultEmphasis(t.label, [re, "show", he, Y, "formatter"])
            },
            mergeOption: function(t, i) {
                t = e.merge(this[Ke], t, !0);
                var n = this.getInitialData(t, i);
                n && (this._data = n,
                this._dataBeforeProcessed = n.cloneShallow())
            },
            getInitialData: function() {},
            getData: function() {
                return this._data
            },
            setData: function(t) {
                this._data = t
            },
            getRawData: function() {
                return this._dataBeforeProcessed
            },
            getRawDataArray: function() {
                return this[Ke].data
            },
            getDimensionsOnAxis: function(t) {
                return [t]
            },
            getCoordDimensionInfo: function(t) {
                var i = this[Pe]();
                return this[de] ? null != t ? i.getDimensionInfo(t) : e.map(i[U], i.getDimensionInfo, i) : []
            },
            getBaseAxis: function() {
                var t = this[de];
                return t && t.getBaseAxis && t.getBaseAxis()
            },
            formatTooltip: function(t, i) {
                var n = this._data
                  , r = this[X](t)
                  , s = e[be](r) ? e.map(r, o).join(", ") : o(r)
                  , l = n[j](t);
                return i ? a(this.name) + " : " + s : a(this.name) + "<br />" + (l ? a(l) + " : " + s : s)
            },
            restoreData: function() {
                this._data = this._dataBeforeProcessed.cloneShallow()
            }
        });
        return e.mixin(s, n.dataFormatMixin),
        s
    }),
    e("echarts/model/Component", [li, "./Model", si, "../util/component", "../util/clazz", "../util/layout", "./mixin/boxLayout"], function(t) {
        function e(t) {
            var e = [];
            return n.each(l.getClassesByMainType(t), function(t) {
                r.apply(e, t[ii].dependencies || [])
            }),
            n.map(e, function(t) {
                return o.parseClassType(t).main
            })
        }
        var i = t("./Model")
          , n = t(si)
          , r = Array[ii].push
          , a = t("../util/component")
          , o = t("../util/clazz")
          , s = t("../util/layout")
          , l = i[Ze]({
            type: "component",
            id: "",
            name: "",
            mainType: "",
            subType: "",
            componentIndex: 0,
            defaultOption: null,
            ecModel: null,
            dependentModels: [],
            uid: null,
            layoutMode: null,
            init: function() {
                this.mergeDefaultAndTheme(this[Ke], this[q])
            },
            mergeDefaultAndTheme: function(t, e) {
                var i = this.layoutMode
                  , r = i ? s.getLayoutParams(t) : {}
                  , a = e.getTheme();
                n.merge(t, a.get(this.mainType)),
                n.merge(t, this.getDefaultOption()),
                i && s.mergeLayoutParam(t, r, i)
            },
            mergeOption: function(t) {
                n.merge(this[Ke], t, !0);
                var e = this.layoutMode;
                e && s.mergeLayoutParam(this[Ke], t, e)
            },
            getDefaultOption: function() {
                if (!this.hasOwnProperty("__defaultOption")) {
                    for (var t = [], e = this.constructor; e; ) {
                        var i = e[ii].defaultOption;
                        i && t.push(i),
                        e = e.superClass
                    }
                    for (var r = {}, a = t[Ve] - 1; a >= 0; a--)
                        r = n.merge(r, t[a], !0);
                    this.__defaultOption = r
                }
                return this.__defaultOption
            }
        });
        return o.enableClassExtend(l, function(t, e, i, r) {
            n[Ze](this, r),
            this.uid = a.getUID("componentModel"),
            this.setReadOnly(["type", "id", "uid", "name", "mainType", "subType", "dependentModels", "componentIndex"])
        }),
        o.enableClassManagement(l, {
            registerWhenExtend: !0
        }),
        a.enableSubTypeDefaulter(l),
        a.enableTopologicalTravel(l, e),
        n.mixin(l, t("./mixin/boxLayout")),
        l
    }),
    e("echarts/model/OptionManager", [li, si, "../util/model", "./Component"], function(t) {
        function e(t) {
            this._api = t,
            this._timelineOptions = [],
            this._mediaList = [],
            this._mediaDefault,
            this._currentMediaIndices = [],
            this._optionBackup,
            this._newOptionBackup
        }
        function i(t, e) {
            var i, n, r = [], a = [], o = t.timeline;
            if (t.baseOption && (n = t.baseOption),
            (o || t.options) && (n = n || {},
            r = (t.options || []).slice()),
            t.media) {
                n = n || {};
                var l = t.media;
                c(l, function(t) {
                    t && t[Ke] && (t.query ? a.push(t) : i || (i = t))
                })
            }
            return n || (n = t),
            n.timeline || (n.timeline = o),
            c([n][H](r)[H](s.map(a, function(t) {
                return t[Ke]
            })), function(t) {
                c(e, function(e) {
                    e(t)
                })
            }),
            {
                baseOption: n,
                timelineOptions: r,
                mediaDefault: i,
                mediaList: a
            }
        }
        function n(t, e, i) {
            var n = {
                width: e,
                height: i,
                aspectratio: e / i
            }
              , a = !0;
            return s.each(t, function(t, e) {
                var i = e.match(p);
                if (i && i[1] && i[2]) {
                    var o = i[1]
                      , s = i[2][ni]();
                    r(n[s], t, o) || (a = !1)
                }
            }),
            a
        }
        function r(t, e, i) {
            return "min" === i ? t >= e : "max" === i ? e >= t : t === e
        }
        function a(t, e) {
            return t.join(",") === e.join(",")
        }
        function o(t, e) {
            e = e || {},
            c(e, function(e, i) {
                if (null != e) {
                    var n = t[i];
                    if (u.hasClass(i)) {
                        s[be](e) || (e = e ? [e] : []);
                        var r = l.mappingToExists(n || [], e);
                        t[i] = d(r, function(t) {
                            return t[Ke] && t.exist ? f(t.exist, t[Ke], !0) : t.exist || t[Ke]
                        })
                    } else
                        t[i] = f(n, e, !0)
                }
            })
        }
        var s = t(si)
          , l = t("../util/model")
          , u = t("./Component")
          , c = s.each
          , h = s.clone
          , d = s.map
          , f = s.merge
          , p = /^(min|max)?(.+)$/;
        return e[ii] = {
            constructor: e,
            setOption: function(t, e) {
                t = h(t, !0);
                var n = this._optionBackup
                  , r = this._newOptionBackup = i.call(this, t, e);
                n ? (o(n.baseOption, r.baseOption),
                r.timelineOptions[Ve] && (n.timelineOptions = r.timelineOptions),
                r.mediaList[Ve] && (n.mediaList = r.mediaList),
                r.mediaDefault && (n.mediaDefault = r.mediaDefault)) : this._optionBackup = r
            },
            mountOption: function(t) {
                var e = t ? this._optionBackup : this._newOptionBackup;
                return this._timelineOptions = d(e.timelineOptions, h),
                this._mediaList = d(e.mediaList, h),
                this._mediaDefault = h(e.mediaDefault),
                this._currentMediaIndices = [],
                h(e.baseOption)
            },
            getTimelineOption: function(t) {
                var e, i = this._timelineOptions;
                if (i[Ve]) {
                    var n = t[W]("timeline");
                    n && (e = h(i[n.getCurrentIndex()], !0))
                }
                return e
            },
            getMediaOption: function() {
                var t = this._api[$e]()
                  , e = this._api[Ye]()
                  , i = this._mediaList
                  , r = this._mediaDefault
                  , o = []
                  , s = [];
                if (!i[Ve] && !r)
                    return s;
                for (var l = 0, u = i[Ve]; u > l; l++)
                    n(i[l].query, t, e) && o.push(l);
                return !o[Ve] && r && (o = [-1]),
                o[Ve] && !a(o, this._currentMediaIndices) && (s = d(o, function(t) {
                    return h(-1 === t ? r[Ke] : i[t][Ke])
                })),
                this._currentMediaIndices = o,
                s
            }
        },
        e
    }),
    e("echarts/view/Component", [li, "zrender/container/Group", "../util/component", "../util/clazz"], function(t) {
        var e = t("zrender/container/Group")
          , i = t("../util/component")
          , n = t("../util/clazz")
          , r = function() {
            this.group = new e,
            this.uid = i.getUID("viewComponent")
        };
        r[ii] = {
            constructor: r,
            init: function() {},
            render: function() {},
            dispose: function() {}
        };
        var a = r[ii];
        return a.updateView = a.updateLayout = a.updateVisual = function() {}
        ,
        n.enableClassExtend(r),
        n.enableClassManagement(r, {
            registerWhenExtend: !0
        }),
        r
    }),
    e("echarts/util/graphic", [li, si, "zrender/tool/path", "zrender/graphic/Path", "zrender/tool/color", "zrender/core/matrix", oi, "zrender/graphic/Gradient", "zrender/container/Group", "zrender/graphic/Image", "zrender/graphic/Text", "zrender/graphic/shape/Circle", "zrender/graphic/shape/Sector", "zrender/graphic/shape/Polygon", "zrender/graphic/shape/Polyline", "zrender/graphic/shape/Rect", "zrender/graphic/shape/Line", "zrender/graphic/shape/BezierCurve", "zrender/graphic/shape/Arc", "zrender/graphic/LinearGradient", "zrender/graphic/RadialGradient", "zrender/core/BoundingRect"], function(t) {
        function e(t) {
            if (!t.__isHover) {
                if (t.__hoverStlDirty) {
                    var e = t.style[N]
                      , i = t.style.fill
                      , n = t.__hoverStl;
                    n.fill = n.fill || (i instanceof y ? i : m.lift(i, -.1)),
                    n[N] = n[N] || (e instanceof y ? e : m.lift(e, -.1));
                    var r = {};
                    for (var a in n)
                        n.hasOwnProperty(a) && (r[a] = t.style[a]);
                    t.__normalStl = r,
                    t.__hoverStlDirty = !1
                }
                t[ne](t.__hoverStl),
                t.z2 += 1,
                t.__isHover = !0
            }
        }
        function i(t) {
            if (t.__isHover) {
                var e = t.__normalStl;
                e && t[ne](e),
                t.z2 -= 1,
                t.__isHover = !1
            }
        }
        function n(t) {
            "group" === t.type ? t[Me](function(t) {
                "group" !== t.type && e(t)
            }) : e(t)
        }
        function r(t) {
            "group" === t.type ? t[Me](function(t) {
                "group" !== t.type && i(t)
            }) : i(t)
        }
        function a(t, e) {
            t.__hoverStl = t.hoverStyle || e,
            t.__hoverStlDirty = !0
        }
        function o() {
            !this.__isEmphasis && n(this)
        }
        function s() {
            !this.__isEmphasis && r(this)
        }
        function l() {
            this.__isEmphasis = !0,
            n(this)
        }
        function u() {
            this.__isEmphasis = !1,
            r(this)
        }
        function c(t, e, i, n, r) {
            var a = t ? "Update" : ""
              , o = n && n[V]("animationDuration" + a)
              , s = n && n[V]("animationEasing" + a);
            n && n[V]("animation") ? e.animateTo(i, o, s, r) : (e.attr(i),
            r && r())
        }
        var h = t(si)
          , d = t("zrender/tool/path")
          , f = Math.round
          , p = t("zrender/graphic/Path")
          , m = t("zrender/tool/color")
          , v = t("zrender/core/matrix")
          , g = t(oi)
          , y = t("zrender/graphic/Gradient")
          , x = {};
        return x.Group = t("zrender/container/Group"),
        x.Image = t("zrender/graphic/Image"),
        x.Text = t("zrender/graphic/Text"),
        x.Circle = t("zrender/graphic/shape/Circle"),
        x.Sector = t("zrender/graphic/shape/Sector"),
        x.Polygon = t("zrender/graphic/shape/Polygon"),
        x.Polyline = t("zrender/graphic/shape/Polyline"),
        x.Rect = t("zrender/graphic/shape/Rect"),
        x.Line = t("zrender/graphic/shape/Line"),
        x.BezierCurve = t("zrender/graphic/shape/BezierCurve"),
        x.Arc = t("zrender/graphic/shape/Arc"),
        x.LinearGradient = t("zrender/graphic/LinearGradient"),
        x.RadialGradient = t("zrender/graphic/RadialGradient"),
        x.BoundingRect = t("zrender/core/BoundingRect"),
        x.extendShape = function(t) {
            return p[Ze](t)
        }
        ,
        x.extendPath = function(t, e) {
            return d.extendFromString(t, e)
        }
        ,
        x.makePath = function(t, e, i, n) {
            var r = d.createFromString(t, e)
              , a = r[se]();
            if (i) {
                var o = a.width / a[He];
                if (n === ae) {
                    var s, l = i[He] * o;
                    l <= i.width ? s = i[He] : (l = i.width,
                    s = l / o);
                    var u = i.x + i.width / 2
                      , c = i.y + i[He] / 2;
                    i.x = u - l / 2,
                    i.y = c - s / 2,
                    i.width = l,
                    i[He] = s
                }
                this.resizePath(r, i)
            }
            return r
        }
        ,
        x.mergePath = d.mergePath,
        x.resizePath = function(t, e) {
            if (t[F]) {
                var i = t[se]()
                  , n = i.calculateTransform(e);
                t[F](n)
            }
        }
        ,
        x.subPixelOptimizeLine = function(t) {
            var e = x.subPixelOptimize
              , i = t.shape
              , n = t.style[G];
            return f(2 * i.x1) === f(2 * i.x2) && (i.x1 = i.x2 = e(i.x1, n, !0)),
            f(2 * i.y1) === f(2 * i.y2) && (i.y1 = i.y2 = e(i.y1, n, !0)),
            t
        }
        ,
        x.subPixelOptimizeRect = function(t) {
            var e = x.subPixelOptimize
              , i = t.shape
              , n = t.style[G]
              , r = i.x
              , a = i.y
              , o = i.width
              , s = i[He];
            return i.x = e(i.x, n, !0),
            i.y = e(i.y, n, !0),
            i.width = Math.max(e(r + o, n, !1) - i.x, 0 === o ? 0 : 1),
            i[He] = Math.max(e(a + s, n, !1) - i.y, 0 === s ? 0 : 1),
            t
        }
        ,
        x.subPixelOptimize = function(t, e, i) {
            var n = f(2 * t);
            return (n + f(e)) % 2 === 0 ? n / 2 : (n + (i ? 1 : -1)) / 2
        }
        ,
        x[Z] = function(t, e) {
            e = e || {},
            "group" === t.type ? t[Me](function(t) {
                "group" !== t.type && a(t, e)
            }) : a(t, e),
            t.on(ke, o).on(Le, s),
            t.on(E, l).on(B, u)
        }
        ,
        x.setText = function(t, e, i) {
            var n = e[V](re) || "inside"
              , r = n[_e]("inside") >= 0 ? "white" : i
              , a = e[Qe](he);
            h[Ze](t, {
                textDistance: e[V](Y) || 5,
                textFont: a[ue](),
                textPosition: n,
                textFill: a[le]() || r
            })
        }
        ,
        x.updateProps = h.curry(c, !0),
        x.initProps = h.curry(c, !1),
        x.getTransform = function(t, e) {
            for (var i = v.identity([]); t && t !== e; )
                v.mul(i, t.getLocalTransform(), i),
                t = t[R];
            return i
        }
        ,
        x[F] = function(t, e, i) {
            return i && (e = v.invert([], e)),
            g[F]([], t, e)
        }
        ,
        x.transformDirection = function(t, e, i) {
            var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0])
              , r = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2])
              , a = ["left" === t ? -n : "right" === t ? n : 0, "top" === t ? -r : t === We ? r : 0];
            return a = x[F](a, e, i),
            Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right" : "left" : a[1] > 0 ? We : "top"
        }
        ,
        x
    }),
    e("echarts/view/Chart", [li, "zrender/container/Group", "../util/component", "../util/clazz"], function(t) {
        function e() {
            this.group = new r,
            this.uid = a.getUID("viewChart")
        }
        function i(t, e) {
            if (t && (t[Re](e),
            "group" === t.type))
                for (var n = 0; n < t.childCount(); n++)
                    i(t.childAt(n), e)
        }
        function n(t, e, n) {
            if (null != e.dataIndex) {
                var r = t[O](e.dataIndex);
                i(r, n)
            } else if (e.name) {
                var a = t.indexOfName(e.name)
                  , r = t[O](a);
                i(r, n)
            } else
                t[I](function(t) {
                    i(t, n)
                })
        }
        var r = t("zrender/container/Group")
          , a = t("../util/component")
          , o = t("../util/clazz");
        e[ii] = {
            type: "chart",
            init: function() {},
            render: function() {},
            highlight: function(t, e, i, r) {
                n(t[Pe](), r, E)
            },
            downplay: function(t, e, i, r) {
                n(t[Pe](), r, B)
            },
            remove: function() {
                this.group[pe]()
            },
            dispose: function() {}
        };
        var s = e[ii];
        return s.updateView = s.updateLayout = s.updateVisual = function(t, e, i, n) {
            this.render(t, e, i, n)
        }
        ,
        o.enableClassExtend(e),
        o.enableClassManagement(e, {
            registerWhenExtend: !0
        }),
        e
    }),
    e("zrender/zrender", [li, "./core/guid", "./core/env", "./Handler", "./Storage", "./animation/Animation", "./Painter"], function(t) {
        function e(t) {
            delete u[t]
        }
        var i = t("./core/guid")
          , n = t("./core/env")
          , r = t("./Handler")
          , a = t("./Storage")
          , o = t("./animation/Animation")
          , s = !n[Ue]
          , l = {
            canvas: t("./Painter")
        }
          , u = {}
          , c = {};
        c.version = "3.0.2",
        c.init = function(t, e) {
            var n = new h(i(),t,e);
            return u[n.id] = n,
            n
        }
        ,
        c[De] = function(t) {
            if (t)
                t[De]();
            else {
                for (var e in u)
                    u[e][De]();
                u = {}
            }
            return c
        }
        ,
        c.getInstance = function(t) {
            return u[t]
        }
        ,
        c.registerPainter = function(t, e) {
            l[t] = e
        }
        ;
        var h = function(t, e, i) {
            i = i || {},
            this.dom = e,
            this.id = t;
            var u = this
              , c = new a
              , h = i.renderer;
            if (s) {
                if (!l.vml)
                    throw new Error("You need to require 'zrender/vml/vml' to support IE8");
                h = "vml"
            } else
                h && l[h] || (h = ti);
            var d = new l[h](e,c,i);
            this.storage = c,
            this.painter = d,
            n.node || (this.handler = new r(d.getViewportRoot(),c,d)),
            this.animation = new o({
                stage: {
                    update: function() {
                        u._needsRefresh && u.refreshImmediately()
                    }
                }
            }),
            this.animation.start(),
            this._needsRefresh;
            var f = c.delFromMap
              , p = c.addToMap;
            c.delFromMap = function(t) {
                var e = c.get(t);
                f.call(c, t),
                e && e.removeSelfFromZr(u)
            }
            ,
            c.addToMap = function(t) {
                p.call(c, t),
                t.addSelfToZr(u)
            }
        };
        return h[ii] = {
            constructor: h,
            getId: function() {
                return this.id
            },
            add: function(t) {
                this.storage.addRoot(t),
                this._needsRefresh = !0
            },
            remove: function(t) {
                this.storage.delRoot(t),
                this._needsRefresh = !0
            },
            configLayer: function(t, e) {
                this.painter.configLayer(t, e),
                this._needsRefresh = !0
            },
            refreshImmediately: function() {
                this._needsRefresh = !1,
                this.painter.refresh(),
                this._needsRefresh = !1
            },
            refresh: function() {
                this._needsRefresh = !0
            },
            resize: function() {
                this.painter[Je](),
                this.handler && this.handler[Je]()
            },
            clearAnimation: function() {
                this.animation.clear()
            },
            getWidth: function() {
                return this.painter[$e]()
            },
            getHeight: function() {
                return this.painter[Ye]()
            },
            toDataURL: function(t, e, i) {
                return this.painter.toDataURL(t, e, i)
            },
            pathToImage: function(t, e, n) {
                var r = i();
                return this.painter.pathToImage(r, t, e, n)
            },
            setDefaultCursorStyle: function(t) {
                this.handler.setDefaultCursorStyle(t)
            },
            on: function(t, e, i) {
                this.handler && this.handler.on(t, e, i)
            },
            off: function(t, e) {
                this.handler && this.handler.off(t, e)
            },
            trigger: function(t, e) {
                this.handler && this.handler[Re](t, e)
            },
            clear: function() {
                this.storage.delRoot(),
                this.painter.clear()
            },
            dispose: function() {
                this.animation.stop(),
                this.clear(),
                this.storage[De](),
                this.painter[De](),
                this.handler && this.handler[De](),
                this.animation = this.storage = this.painter = this.handler = null,
                e(this.id)
            }
        },
        c
    }),
    e(si, [li, "../graphic/Gradient"], function(t) {
        function e(t) {
            if ("object" == typeof t && null !== t) {
                var i = t;
                if (t instanceof Array) {
                    i = [];
                    for (var n = 0, r = t[Ve]; r > n; n++)
                        i[n] = e(t[n])
                } else if (!M(t) && !S(t)) {
                    i = {};
                    for (var a in t)
                        t.hasOwnProperty(a) && (i[a] = e(t[a]))
                }
                return i
            }
            return t
        }
        function i(t, n, r) {
            if (!w(n) || !w(t))
                return r ? e(n) : t;
            for (var a in n)
                if (n.hasOwnProperty(a)) {
                    var o = t[a]
                      , s = n[a];
                    !w(s) || !w(o) || x(s) || x(o) || S(s) || S(o) || M(s) || M(o) ? !r && a in t || (t[a] = e(n[a], !0)) : i(o, s, r)
                }
            return t
        }
        function n(t, e) {
            for (var n = t[0], r = 1, a = t[Ve]; a > r; r++)
                n = i(n, t[r], e);
            return n
        }
        function r(t, e) {
            for (var i in e)
                e.hasOwnProperty(i) && (t[i] = e[i]);
            return t
        }
        function a(t, e, i) {
            for (var n in e)
                e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]);
            return t
        }
        function o() {
            return document[D](ti)
        }
        function s() {
            return z || (z = N.createCanvas()[P]("2d")),
            z
        }
        function l(t, e) {
            if (t) {
                if (t[_e])
                    return t[_e](e);
                for (var i = 0, n = t[Ve]; n > i; i++)
                    if (t[i] === e)
                        return i
            }
            return -1
        }
        function u(t, e) {
            function i() {}
            var n = t[ii];
            i[ii] = e[ii],
            t[ii] = new i;
            for (var r in n)
                t[ii][r] = n[r];
            t[ii].constructor = t,
            t.superClass = e
        }
        function c(t, e, i) {
            t = ii in t ? t[ii] : t,
            e = ii in e ? e[ii] : e,
            a(t, e, i)
        }
        function h(t) {
            return t ? typeof t == ei ? !1 : typeof t[Ve] == ge : void 0
        }
        function d(t, e, i) {
            if (t && e)
                if (t.forEach && t.forEach === R)
                    t.forEach(e, i);
                else if (t[Ve] === +t[Ve])
                    for (var n = 0, r = t[Ve]; r > n; n++)
                        e.call(i, t[n], n, t);
                else
                    for (var a in t)
                        t.hasOwnProperty(a) && e.call(i, t[a], a, t)
        }
        function f(t, e, i) {
            if (t && e) {
                if (t.map && t.map === E)
                    return t.map(e, i);
                for (var n = [], r = 0, a = t[Ve]; a > r; r++)
                    n.push(e.call(i, t[r], r, t));
                return n
            }
        }
        function p(t, e, i, n) {
            if (t && e) {
                if (t.reduce && t.reduce === Z)
                    return t.reduce(e, i, n);
                for (var r = 0, a = t[Ve]; a > r; r++)
                    i = e.call(n, i, t[r], r, t);
                return i
            }
        }
        function m(t, e, i) {
            if (t && e) {
                if (t[ri] && t[ri] === V)
                    return t[ri](e, i);
                for (var n = [], r = 0, a = t[Ve]; a > r; r++)
                    e.call(i, t[r], r, t) && n.push(t[r]);
                return n
            }
        }
        function v(t, e, i) {
            if (t && e)
                for (var n = 0, r = t[Ve]; r > n; n++)
                    if (e.call(i, t[n], n, t))
                        return t[n]
        }
        function g(t, e) {
            var i = B.call(arguments, 2);
            return function() {
                return t.apply(e, i[H](B.call(arguments)))
            }
        }
        function y(t) {
            var e = B.call(arguments, 1);
            return function() {
                return t.apply(this, e[H](B.call(arguments)))
            }
        }
        function x(t) {
            return "[object Array]" === I.call(t)
        }
        function _(t) {
            return typeof t === xe
        }
        function b(t) {
            return "[object String]" === I.call(t)
        }
        function w(t) {
            var e = typeof t;
            return e === xe || !!t && "object" == e
        }
        function M(t) {
            return !!k[I.call(t)] || t instanceof L
        }
        function S(t) {
            return t && 1 === t.nodeType && typeof t.nodeName == ei
        }
        function C() {
            for (var t = 0, e = arguments[Ve]; e > t; t++)
                if (null != arguments[t])
                    return arguments[t]
        }
        function T() {
            return Function.call.apply(B, arguments)
        }
        function A(t, e) {
            if (!t)
                throw new Error(e)
        }
        var z, L = t("../graphic/Gradient"), k = {
            "[object Function]": 1,
            "[object RegExp]": 1,
            "[object Date]": 1,
            "[object Error]": 1,
            "[object CanvasGradient]": 1
        }, I = Object[ii].toString, O = Array[ii], R = O.forEach, V = O[ri], B = O.slice, E = O.map, Z = O.reduce, N = {
            inherits: u,
            mixin: c,
            clone: e,
            merge: i,
            mergeAll: n,
            extend: r,
            defaults: a,
            getContext: s,
            createCanvas: o,
            indexOf: l,
            slice: T,
            find: v,
            isArrayLike: h,
            each: d,
            map: f,
            reduce: p,
            filter: m,
            bind: g,
            curry: y,
            isArray: x,
            isString: b,
            isObject: w,
            isFunction: _,
            isBuildInObject: M,
            isDom: S,
            retrieve: C,
            assert: A,
            noop: function() {}
        };
        return N
    }),
    e("zrender/tool/color", [li], function() {
        function t(t) {
            return t = Math.round(t),
            0 > t ? 0 : t > 255 ? 255 : t
        }
        function e(t) {
            return t = Math.round(t),
            0 > t ? 0 : t > 360 ? 360 : t
        }
        function i(t) {
            return 0 > t ? 0 : t > 1 ? 1 : t
        }
        function n(e) {
            return t(e[Ve] && "%" === e.charAt(e[Ve] - 1) ? parseFloat(e) / 100 * 255 : parseInt(e, 10))
        }
        function r(t) {
            return i(t[Ve] && "%" === t.charAt(t[Ve] - 1) ? parseFloat(t) / 100 : parseFloat(t))
        }
        function a(t, e, i) {
            return 0 > i ? i += 1 : i > 1 && (i -= 1),
            1 > 6 * i ? t + (e - t) * i * 6 : 1 > 2 * i ? e : 2 > 3 * i ? t + (e - t) * (2 / 3 - i) * 6 : t
        }
        function o(t, e, i) {
            return t + (e - t) * i
        }
        function s(t) {
            if (t) {
                t += "";
                var e = t[we](/ /g, "")[ni]();
                if (e in y)
                    return y[e].slice();
                if ("#" !== e.charAt(0)) {
                    var i = e[_e]("(")
                      , a = e[_e](")");
                    if (-1 !== i && a + 1 === e[Ve]) {
                        var o = e.substr(0, i)
                          , s = e.substr(i + 1, a - (i + 1)).split(",")
                          , u = 1;
                        switch (o) {
                        case "rgba":
                            if (4 !== s[Ve])
                                return;
                            u = r(s.pop());
                        case "rgb":
                            if (3 !== s[Ve])
                                return;
                            return [n(s[0]), n(s[1]), n(s[2]), u];
                        case "hsla":
                            if (4 !== s[Ve])
                                return;
                            return s[3] = r(s[3]),
                            l(s);
                        case "hsl":
                            if (3 !== s[Ve])
                                return;
                            return l(s);
                        default:
                            return
                        }
                    }
                } else {
                    if (4 === e[Ve]) {
                        var c = parseInt(e.substr(1), 16);
                        if (!(c >= 0 && 4095 >= c))
                            return;
                        return [(3840 & c) >> 4 | (3840 & c) >> 8, 240 & c | (240 & c) >> 4, 15 & c | (15 & c) << 4, 1]
                    }
                    if (7 === e[Ve]) {
                        var c = parseInt(e.substr(1), 16);
                        if (!(c >= 0 && 16777215 >= c))
                            return;
                        return [(16711680 & c) >> 16, (65280 & c) >> 8, 255 & c, 1]
                    }
                }
            }
        }
        function l(e) {
            var i = (parseFloat(e[0]) % 360 + 360) % 360 / 360
              , n = r(e[1])
              , o = r(e[2])
              , s = .5 >= o ? o * (n + 1) : o + n - o * n
              , l = 2 * o - s
              , u = [t(255 * a(l, s, i + 1 / 3)), t(255 * a(l, s, i)), t(255 * a(l, s, i - 1 / 3))];
            return 4 === e[Ve] && (u[3] = e[3]),
            u
        }
        function u(t) {
            if (t) {
                var e, i, n = t[0] / 255, r = t[1] / 255, a = t[2] / 255, o = Math.min(n, r, a), s = Math.max(n, r, a), l = s - o, u = (s + o) / 2;
                if (0 === l)
                    e = 0,
                    i = 0;
                else {
                    i = .5 > u ? l / (s + o) : l / (2 - s - o);
                    var c = ((s - n) / 6 + l / 2) / l
                      , h = ((s - r) / 6 + l / 2) / l
                      , d = ((s - a) / 6 + l / 2) / l;
                    n === s ? e = d - h : r === s ? e = 1 / 3 + c - d : a === s && (e = 2 / 3 + h - c),
                    0 > e && (e += 1),
                    e > 1 && (e -= 1)
                }
                var f = [360 * e, i, u];
                return null != t[3] && f.push(t[3]),
                f
            }
        }
        function c(t, e) {
            var i = s(t);
            if (i) {
                for (var n = 0; 3 > n; n++)
                    i[n] = 0 > e ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0;
                return g(i, 4 === i[Ve] ? "rgba" : "rgb")
            }
        }
        function h(t) {
            var e = s(t);
            return e ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0
        }
        function d(e, i, n) {
            if (i && i[Ve] && e >= 0 && 1 >= e) {
                n = n || [0, 0, 0, 0];
                var r = e * (i[Ve] - 1)
                  , a = Math.floor(r)
                  , s = Math.ceil(r)
                  , l = i[a]
                  , u = i[s]
                  , c = r - a;
                return n[0] = t(o(l[0], u[0], c)),
                n[1] = t(o(l[1], u[1], c)),
                n[2] = t(o(l[2], u[2], c)),
                n[3] = t(o(l[3], u[3], c)),
                n
            }
        }
        function f(e, n, r) {
            if (n && n[Ve] && e >= 0 && 1 >= e) {
                var a = e * (n[Ve] - 1)
                  , l = Math.floor(a)
                  , u = Math.ceil(a)
                  , c = s(n[l])
                  , h = s(n[u])
                  , d = a - l
                  , f = g([t(o(c[0], h[0], d)), t(o(c[1], h[1], d)), t(o(c[2], h[2], d)), i(o(c[3], h[3], d))], "rgba");
                return r ? {
                    color: f,
                    leftIndex: l,
                    rightIndex: u,
                    value: a
                } : f
            }
        }
        function p(t, e) {
            if (!(2 !== t[Ve] || t[1] < t[0])) {
                for (var i = f(t[0], e, !0), n = f(t[1], e, !0), r = [{
                    color: i.color,
                    offset: 0
                }], a = n.value - i.value, o = Math.max(i.value, i.rightIndex), s = Math.min(n.value, n.leftIndex), l = o; a > 0 && s >= l; l++)
                    r.push({
                        color: e[l],
                        offset: (l - i.value) / a
                    });
                return r.push({
                    color: n.color,
                    offset: 1
                }),
                r
            }
        }
        function m(t, i, n, a) {
            return t = s(t),
            t ? (t = u(t),
            null != i && (t[0] = e(i)),
            null != n && (t[1] = r(n)),
            null != a && (t[2] = r(a)),
            g(l(t), "rgba")) : void 0
        }
        function v(t, e) {
            return t = s(t),
            t && null != e ? (t[3] = i(e),
            g(t, "rgba")) : void 0
        }
        function g(t, e) {
            return ("rgb" === e || "hsv" === e || "hsl" === e) && (t = t.slice(0, 3)),
            e + "(" + t.join(",") + ")"
        }
        var y = {
            transparent: [0, 0, 0, 0],
            aliceblue: [240, 248, 255, 1],
            antiquewhite: [250, 235, 215, 1],
            aqua: [0, 255, 255, 1],
            aquamarine: [127, 255, 212, 1],
            azure: [240, 255, 255, 1],
            beige: [245, 245, 220, 1],
            bisque: [255, 228, 196, 1],
            black: [0, 0, 0, 1],
            blanchedalmond: [255, 235, 205, 1],
            blue: [0, 0, 255, 1],
            blueviolet: [138, 43, 226, 1],
            brown: [165, 42, 42, 1],
            burlywood: [222, 184, 135, 1],
            cadetblue: [95, 158, 160, 1],
            chartreuse: [127, 255, 0, 1],
            chocolate: [210, 105, 30, 1],
            coral: [255, 127, 80, 1],
            cornflowerblue: [100, 149, 237, 1],
            cornsilk: [255, 248, 220, 1],
            crimson: [220, 20, 60, 1],
            cyan: [0, 255, 255, 1],
            darkblue: [0, 0, 139, 1],
            darkcyan: [0, 139, 139, 1],
            darkgoldenrod: [184, 134, 11, 1],
            darkgray: [169, 169, 169, 1],
            darkgreen: [0, 100, 0, 1],
            darkgrey: [169, 169, 169, 1],
            darkkhaki: [189, 183, 107, 1],
            darkmagenta: [139, 0, 139, 1],
            darkolivegreen: [85, 107, 47, 1],
            darkorange: [255, 140, 0, 1],
            darkorchid: [153, 50, 204, 1],
            darkred: [139, 0, 0, 1],
            darksalmon: [233, 150, 122, 1],
            darkseagreen: [143, 188, 143, 1],
            darkslateblue: [72, 61, 139, 1],
            darkslategray: [47, 79, 79, 1],
            darkslategrey: [47, 79, 79, 1],
            darkturquoise: [0, 206, 209, 1],
            darkviolet: [148, 0, 211, 1],
            deeppink: [255, 20, 147, 1],
            deepskyblue: [0, 191, 255, 1],
            dimgray: [105, 105, 105, 1],
            dimgrey: [105, 105, 105, 1],
            dodgerblue: [30, 144, 255, 1],
            firebrick: [178, 34, 34, 1],
            floralwhite: [255, 250, 240, 1],
            forestgreen: [34, 139, 34, 1],
            fuchsia: [255, 0, 255, 1],
            gainsboro: [220, 220, 220, 1],
            ghostwhite: [248, 248, 255, 1],
            gold: [255, 215, 0, 1],
            goldenrod: [218, 165, 32, 1],
            gray: [128, 128, 128, 1],
            green: [0, 128, 0, 1],
            greenyellow: [173, 255, 47, 1],
            grey: [128, 128, 128, 1],
            honeydew: [240, 255, 240, 1],
            hotpink: [255, 105, 180, 1],
            indianred: [205, 92, 92, 1],
            indigo: [75, 0, 130, 1],
            ivory: [255, 255, 240, 1],
            khaki: [240, 230, 140, 1],
            lavender: [230, 230, 250, 1],
            lavenderblush: [255, 240, 245, 1],
            lawngreen: [124, 252, 0, 1],
            lemonchiffon: [255, 250, 205, 1],
            lightblue: [173, 216, 230, 1],
            lightcoral: [240, 128, 128, 1],
            lightcyan: [224, 255, 255, 1],
            lightgoldenrodyellow: [250, 250, 210, 1],
            lightgray: [211, 211, 211, 1],
            lightgreen: [144, 238, 144, 1],
            lightgrey: [211, 211, 211, 1],
            lightpink: [255, 182, 193, 1],
            lightsalmon: [255, 160, 122, 1],
            lightseagreen: [32, 178, 170, 1],
            lightskyblue: [135, 206, 250, 1],
            lightslategray: [119, 136, 153, 1],
            lightslategrey: [119, 136, 153, 1],
            lightsteelblue: [176, 196, 222, 1],
            lightyellow: [255, 255, 224, 1],
            lime: [0, 255, 0, 1],
            limegreen: [50, 205, 50, 1],
            linen: [250, 240, 230, 1],
            magenta: [255, 0, 255, 1],
            maroon: [128, 0, 0, 1],
            mediumaquamarine: [102, 205, 170, 1],
            mediumblue: [0, 0, 205, 1],
            mediumorchid: [186, 85, 211, 1],
            mediumpurple: [147, 112, 219, 1],
            mediumseagreen: [60, 179, 113, 1],
            mediumslateblue: [123, 104, 238, 1],
            mediumspringgreen: [0, 250, 154, 1],
            mediumturquoise: [72, 209, 204, 1],
            mediumvioletred: [199, 21, 133, 1],
            midnightblue: [25, 25, 112, 1],
            mintcream: [245, 255, 250, 1],
            mistyrose: [255, 228, 225, 1],
            moccasin: [255, 228, 181, 1],
            navajowhite: [255, 222, 173, 1],
            navy: [0, 0, 128, 1],
            oldlace: [253, 245, 230, 1],
            olive: [128, 128, 0, 1],
            olivedrab: [107, 142, 35, 1],
            orange: [255, 165, 0, 1],
            orangered: [255, 69, 0, 1],
            orchid: [218, 112, 214, 1],
            palegoldenrod: [238, 232, 170, 1],
            palegreen: [152, 251, 152, 1],
            paleturquoise: [175, 238, 238, 1],
            palevioletred: [219, 112, 147, 1],
            papayawhip: [255, 239, 213, 1],
            peachpuff: [255, 218, 185, 1],
            peru: [205, 133, 63, 1],
            pink: [255, 192, 203, 1],
            plum: [221, 160, 221, 1],
            powderblue: [176, 224, 230, 1],
            purple: [128, 0, 128, 1],
            red: [255, 0, 0, 1],
            rosybrown: [188, 143, 143, 1],
            royalblue: [65, 105, 225, 1],
            saddlebrown: [139, 69, 19, 1],
            salmon: [250, 128, 114, 1],
            sandybrown: [244, 164, 96, 1],
            seagreen: [46, 139, 87, 1],
            seashell: [255, 245, 238, 1],
            sienna: [160, 82, 45, 1],
            silver: [192, 192, 192, 1],
            skyblue: [135, 206, 235, 1],
            slateblue: [106, 90, 205, 1],
            slategray: [112, 128, 144, 1],
            slategrey: [112, 128, 144, 1],
            snow: [255, 250, 250, 1],
            springgreen: [0, 255, 127, 1],
            steelblue: [70, 130, 180, 1],
            tan: [210, 180, 140, 1],
            teal: [0, 128, 128, 1],
            thistle: [216, 191, 216, 1],
            tomato: [255, 99, 71, 1],
            turquoise: [64, 224, 208, 1],
            violet: [238, 130, 238, 1],
            wheat: [245, 222, 179, 1],
            white: [255, 255, 255, 1],
            whitesmoke: [245, 245, 245, 1],
            yellow: [255, 255, 0, 1],
            yellowgreen: [154, 205, 50, 1]
        };
        return {
            parse: s,
            lift: c,
            toHex: h,
            fastMapToColor: d,
            mapToColor: f,
            mapIntervalToColor: p,
            modifyHSL: m,
            modifyAlpha: v,
            stringify: g
        }
    }),
    e("zrender/mixin/Eventful", [li, k], function(t) {
        var e = Array[ii].slice
          , i = t(k)
          , n = i[_e]
          , r = function() {
            this._$handlers = {}
        };
        return r[ii] = {
            constructor: r,
            one: function(t, e, i) {
                var r = this._$handlers;
                return e && t ? (r[t] || (r[t] = []),
                n(r[t], t) >= 0 ? this : (r[t].push({
                    h: e,
                    one: !0,
                    ctx: i || this
                }),
                this)) : this
            },
            on: function(t, e, i) {
                var n = this._$handlers;
                return e && t ? (n[t] || (n[t] = []),
                n[t].push({
                    h: e,
                    one: !1,
                    ctx: i || this
                }),
                this) : this
            },
            isSilent: function(t) {
                var e = this._$handlers;
                return e[t] && e[t][Ve]
            },
            off: function(t, e) {
                var i = this._$handlers;
                if (!t)
                    return this._$handlers = {},
                    this;
                if (e) {
                    if (i[t]) {
                        for (var n = [], r = 0, a = i[t][Ve]; a > r; r++)
                            i[t][r].h != e && n.push(i[t][r]);
                        i[t] = n
                    }
                    i[t] && 0 === i[t][Ve] && delete i[t]
                } else
                    delete i[t];
                return this
            },
            trigger: function(t) {
                if (this._$handlers[t]) {
                    var i = arguments
                      , n = i[Ve];
                    n > 3 && (i = e.call(i, 1));
                    for (var r = this._$handlers[t], a = r[Ve], o = 0; a > o; ) {
                        switch (n) {
                        case 1:
                            r[o].h.call(r[o].ctx);
                            break;
                        case 2:
                            r[o].h.call(r[o].ctx, i[1]);
                            break;
                        case 3:
                            r[o].h.call(r[o].ctx, i[1], i[2]);
                            break;
                        default:
                            r[o].h.apply(r[o].ctx, i)
                        }
                        r[o].one ? (r.splice(o, 1),
                        a--) : o++
                    }
                }
                return this
            },
            triggerWithContext: function(t) {
                if (this._$handlers[t]) {
                    var i = arguments
                      , n = i[Ve];
                    n > 4 && (i = e.call(i, 1, i[Ve] - 1));
                    for (var r = i[i[Ve] - 1], a = this._$handlers[t], o = a[Ve], s = 0; o > s; ) {
                        switch (n) {
                        case 1:
                            a[s].h.call(r);
                            break;
                        case 2:
                            a[s].h.call(r, i[1]);
                            break;
                        case 3:
                            a[s].h.call(r, i[1], i[2]);
                            break;
                        default:
                            a[s].h.apply(r, i)
                        }
                        a[s].one ? (a.splice(s, 1),
                        o--) : s++
                    }
                }
                return this
            }
        },
        r
    }),
    e("zrender/core/env", [], function() {
        function t(t) {
            var e = {}
              , i = {}
              , n = t.match(/Web[kK]it[\/]{0,1}([\d.]+)/)
              , r = t.match(/(Android);?[\s\/]+([\d.]+)?/)
              , a = t.match(/(iPad).*OS\s([\d_]+)/)
              , o = t.match(/(iPod)(.*OS\s([\d_]+))?/)
              , s = !a && t.match(/(iPhone\sOS)\s([\d_]+)/)
              , l = t.match(/(webOS|hpwOS)[\s\/]([\d.]+)/)
              , u = l && t.match(/TouchPad/)
              , c = t.match(/Kindle\/([\d.]+)/)
              , h = t.match(/Silk\/([\d._]+)/)
              , d = t.match(/(BlackBerry).*Version\/([\d.]+)/)
              , f = t.match(/(BB10).*Version\/([\d.]+)/)
              , p = t.match(/(RIM\sTablet\sOS)\s([\d.]+)/)
              , m = t.match(/PlayBook/)
              , v = t.match(/Chrome\/([\d.]+)/) || t.match(/CriOS\/([\d.]+)/)
              , g = t.match(/Firefox\/([\d.]+)/)
              , y = n && t.match(/Mobile\//) && !v
              , x = t.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !v
              , _ = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/)
              , b = t.match(/Edge\/([\d.]+)/);
            return (i.webkit = !!n) && (i.version = n[1]),
            r && (e.android = !0,
            e.version = r[2]),
            s && !o && (e.ios = e.iphone = !0,
            e.version = s[2][we](/_/g, ".")),
            a && (e.ios = e.ipad = !0,
            e.version = a[2][we](/_/g, ".")),
            o && (e.ios = e.ipod = !0,
            e.version = o[3] ? o[3][we](/_/g, ".") : null),
            l && (e.webos = !0,
            e.version = l[2]),
            u && (e.touchpad = !0),
            d && (e.blackberry = !0,
            e.version = d[2]),
            f && (e.bb10 = !0,
            e.version = f[2]),
            p && (e.rimtabletos = !0,
            e.version = p[2]),
            m && (i.playbook = !0),
            c && (e.kindle = !0,
            e.version = c[1]),
            h && (i.silk = !0,
            i.version = h[1]),
            !h && e.android && t.match(/Kindle Fire/) && (i.silk = !0),
            v && (i.chrome = !0,
            i.version = v[1]),
            g && (i.firefox = !0,
            i.version = g[1]),
            _ && (i.ie = !0,
            i.version = _[1]),
            y && (t.match(/Safari/) || e.ios) && (i.safari = !0),
            x && (i.webview = !0),
            _ && (i.ie = !0,
            i.version = _[1]),
            b && (i.edge = !0,
            i.version = b[1]),
            e.tablet = !!(a || m || r && !t.match(/Mobile/) || g && t.match(/Tablet/) || _ && !t.match(/Phone/) && t.match(/Touch/)),
            e.phone = !(e.tablet || e.ipod || !(r || s || l || d || f || v && t.match(/Android/) || v && t.match(/CriOS\/([\d.]+)/) || g && t.match(/Mobile/) || _ && t.match(/Touch/))),
            {
                browser: i,
                os: e,
                node: !1,
                canvasSupported: document[D](ti)[P] ? !0 : !1,
                touchEventsSupported: "ontouchstart"in window && !i.ie && !i.edge,
                pointerEventsSupported: "onpointerdown"in window && (i.edge || i.ie && i.version >= 10)
            }
        }
        var e = {};
        return e = typeof navigator === L ? {
            browser: {},
            os: {},
            node: !0,
            canvasSupported: !0
        } : t(navigator.userAgent)
    }),
    e("echarts/loading/default", [li, "../util/graphic", si], function(t) {
        var e = t("../util/graphic")
          , i = t(si)
          , n = Math.PI;
        return function(t, r) {
            r = r || {},
            i[Be](r, {
                text: "loading",
                color: "#c23531",
                textColor: "#000",
                maskColor: "rgba(255, 255, 255, 0.8)",
                zlevel: 0
            });
            var a = new e.Rect({
                style: {
                    fill: r.maskColor
                },
                zlevel: r[Se],
                z: 1e4
            })
              , o = new e.Arc({
                shape: {
                    startAngle: -n / 2,
                    endAngle: -n / 2 + .1,
                    r: 10
                },
                style: {
                    stroke: r.color,
                    lineCap: "round",
                    lineWidth: 5
                },
                zlevel: r[Se],
                z: 10001
            })
              , s = new e.Rect({
                style: {
                    fill: "none",
                    text: r.text,
                    textPosition: "right",
                    textDistance: 10,
                    textFill: r.textColor
                },
                zlevel: r[Se],
                z: 10001
            });
            o.animateShape(!0).when(1e3, {
                endAngle: 3 * n / 2
            }).start("circularInOut"),
            o.animateShape(!0).when(1e3, {
                startAngle: 3 * n / 2
            }).delay(300).start("circularInOut");
            var l = new e.Group;
            return l.add(o),
            l.add(s),
            l.add(a),
            l[Je] = function() {
                var e = t[$e]() / 2
                  , i = t[Ye]() / 2;
                o[z]({
                    cx: e,
                    cy: i
                });
                var n = o.shape.r;
                s[z]({
                    x: e - n,
                    y: i - n,
                    width: 2 * n,
                    height: 2 * n
                }),
                a[z]({
                    x: 0,
                    y: 0,
                    width: t[$e](),
                    height: t[Ye]()
                })
            }
            ,
            l[Je](),
            l
        }
    }),
    e("echarts/preprocessor/backwardCompat", [li, si, "./helper/compatStyle"], function(t) {
        function e(t, e) {
            e = e.split(",");
            for (var i = t, n = 0; n < e[Ve] && (i = i && i[e[n]],
            null != i); n++)
                ;
            return i
        }
        function i(t, e, i, n) {
            e = e.split(",");
            for (var r, a = t, o = 0; o < e[Ve] - 1; o++)
                r = e[o],
                null == a[r] && (a[r] = {}),
                a = a[r];
            (n || null == a[e[o]]) && (a[e[o]] = i)
        }
        function n(t) {
            u(o, function(e) {
                e[0]in t && !(e[1]in t) && (t[e[1]] = t[e[0]])
            })
        }
        var r = t(si)
          , a = t("./helper/compatStyle")
          , o = [["x", "left"], ["y", "top"], ["x2", "right"], ["y2", We]]
          , s = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"]
          , l = ["bar", "boxplot", "candlestick", "chord", "effectScatter", "funnel", "gauge", "lines", "graph", "heatmap", "line", "map", "parallel", "pie", "radar", "sankey", "scatter", "treemap"]
          , u = r.each;
        return function(t) {
            u(t[Ie], function(t) {
                if (r[Ge](t)) {
                    var o = t.type;
                    if (a(t),
                    ("pie" === o || "gauge" === o) && null != t.clockWise && (t.clockwise = t.clockWise),
                    "gauge" === o) {
                        var s = e(t, "pointer.color");
                        null != s && i(t, "itemStyle.normal.color", s)
                    }
                    for (var u = 0; u < l[Ve]; u++)
                        if (l[u] === t.type) {
                            n(t);
                            break
                        }
                }
            }),
            t.dataRange && (t.visualMap = t.dataRange),
            u(s, function(e) {
                var i = t[e];
                i && (r[be](i) || (i = [i]),
                u(i, function(t) {
                    n(t)
                }))
            })
        }
    }),
    e("echarts/visual/seriesColor", [li, "zrender/graphic/Gradient"], function(t) {
        var e = t("zrender/graphic/Gradient");
        return function(t, i, n) {
            function r(t) {
                var r = [i, B, "color"]
                  , a = n.get("color")
                  , o = t[Pe]()
                  , s = t.get(r) || a[t[Te] % a[Ve]];
                o.setVisual("color", s),
                n.isSeriesFiltered(t) || (typeof s !== xe || s instanceof e || o.each(function(e) {
                    o[A](e, "color", s(t[Ce](e)))
                }),
                o.each(function(t) {
                    var e = o[T](t)
                      , i = e.get(r, !0);
                    null != i && o[A](t, "color", i)
                }))
            }
            t ? n.eachSeriesByType(t, r) : n[Oe](r)
        }
    }),
    e("echarts/util/number", [li, si], function(t) {
        function e(t) {
            return t[we](/^\s+/, "")[we](/\s+$/, "")
        }
        var i = t(si)
          , n = {}
          , r = 1e-4;
        return n[C] = function(t, e, r, a) {
            if (i[be](t))
                return i.map(t, function(t) {
                    return n[C](t, e, r, a)
                });
            var o = e[1] - e[0];
            if (0 === o)
                return (r[0] + r[1]) / 2;
            var s = (t - e[0]) / o;
            return a && (s = Math.min(Math.max(s, 0), 1)),
            s * (r[1] - r[0]) + r[0]
        }
        ,
        n[S] = function(t, i) {
            switch (t) {
            case ae:
            case M:
                t = "50%";
                break;
            case "left":
            case "top":
                t = "0%";
                break;
            case "right":
            case We:
                t = "100%"
            }
            return typeof t === ei ? e(t).match(/%$/) ? parseFloat(t) / 100 * i : parseFloat(t) : null == t ? 0 / 0 : +t
        }
        ,
        n.round = function(t) {
            return +(+t)[w](12)
        }
        ,
        n.asc = function(t) {
            return t.sort(function(t, e) {
                return t - e
            }),
            t
        }
        ,
        n.getPrecision = function(t) {
            for (var e = 1, i = 0; Math.round(t * e) / e !== t; )
                e *= 10,
                i++;
            return i
        }
        ,
        n.getPixelPrecision = function(t, e) {
            var i = Math.log
              , n = Math.LN10
              , r = Math.floor(i(t[1] - t[0]) / n)
              , a = Math.round(i(Math.abs(e[1] - e[0])) / n);
            return Math.max(-r + a, 0)
        }
        ,
        n.MAX_SAFE_INTEGER = 9007199254740991,
        n.remRadian = function(t) {
            var e = 2 * Math.PI;
            return (t % e + e) % e
        }
        ,
        n.isRadianAroundZero = function(t) {
            return t > -r && r > t
        }
        ,
        n.parseDate = function(t) {
            return t instanceof Date ? t : new Date(typeof t === ei ? t[we](/-/g, "/") : Math.round(t))
        }
        ,
        n
    }),
    e("echarts/util/format", [li, si, "./number"], function(t) {
        function e(t) {
            return isNaN(t) ? "-" : (t = (t + "").split("."),
            t[0][we](/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t[Ve] > 1 ? "." + t[1] : ""))
        }
        function i(t) {
            return t[ni]()[we](/-(.)/g, function(t, e) {
                return e.toUpperCase()
            })
        }
        function n(t) {
            var e = t[Ve];
            return typeof t === ge ? [t, t, t, t] : 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
        }
        function r(t) {
            return String(t)[we](/&/g, "&amp;")[we](/</g, "&lt;")[we](/>/g, "&gt;")[we](/"/g, "&quot;")[we](/'/g, "&#39;")
        }
        function a(t, e) {
            return "{" + t + (null == e ? "" : e) + "}"
        }
        function o(t, e) {
            u[be](e) || (e = [e]);
            var i = e[Ve];
            if (!i)
                return "";
            for (var n = e[0].$vars, r = 0; r < n[Ve]; r++) {
                var o = h[r];
                t = t[we](a(o), a(o, 0))
            }
            for (var s = 0; i > s; s++)
                for (var l = 0; l < n[Ve]; l++)
                    t = t[we](a(h[l], s), e[s][n[l]]);
            return t
        }
        function s(t, e) {
            ("week" === t || "month" === t || "quarter" === t || "half-year" === t || "year" === t) && (t = "MM-dd\nyyyy");
            var i = c.parseDate(e)
              , n = i.getFullYear()
              , r = i.getMonth() + 1
              , a = i.getDate()
              , o = i.getHours()
              , s = i.getMinutes()
              , u = i.getSeconds();
            return t = t[we]("MM", l(r))[ni]()[we]("yyyy", n)[we]("yy", n % 100)[we]("dd", l(a))[we]("d", a)[we]("hh", l(o))[we]("h", o)[we]("mm", l(s))[we]("m", s)[we]("ss", l(u))[we]("s", u)
        }
        function l(t) {
            return 10 > t ? "0" + t : t
        }
        var u = t(si)
          , c = t("./number")
          , h = ["a", "b", "c", "d", "e", "f", "g"];
        return {
            normalizeCssArray: n,
            addCommas: e,
            toCamelCase: i,
            encodeHTML: r,
            formatTpl: o,
            formatTime: s
        }
    }),
    e("zrender/core/matrix", [], function() {
        var t = typeof Float32Array === L ? Array : Float32Array
          , e = {
            create: function() {
                var i = new t(6);
                return e.identity(i),
                i
            },
            identity: function(t) {
                return t[0] = 1,
                t[1] = 0,
                t[2] = 0,
                t[3] = 1,
                t[4] = 0,
                t[5] = 0,
                t
            },
            copy: function(t, e) {
                return t[0] = e[0],
                t[1] = e[1],
                t[2] = e[2],
                t[3] = e[3],
                t[4] = e[4],
                t[5] = e[5],
                t
            },
            mul: function(t, e, i) {
                var n = e[0] * i[0] + e[2] * i[1]
                  , r = e[1] * i[0] + e[3] * i[1]
                  , a = e[0] * i[2] + e[2] * i[3]
                  , o = e[1] * i[2] + e[3] * i[3]
                  , s = e[0] * i[4] + e[2] * i[5] + e[4]
                  , l = e[1] * i[4] + e[3] * i[5] + e[5];
                return t[0] = n,
                t[1] = r,
                t[2] = a,
                t[3] = o,
                t[4] = s,
                t[5] = l,
                t
            },
            translate: function(t, e, i) {
                return t[0] = e[0],
                t[1] = e[1],
                t[2] = e[2],
                t[3] = e[3],
                t[4] = e[4] + i[0],
                t[5] = e[5] + i[1],
                t
            },
            rotate: function(t, e, i) {
                var n = e[0]
                  , r = e[2]
                  , a = e[4]
                  , o = e[1]
                  , s = e[3]
                  , l = e[5]
                  , u = Math.sin(i)
                  , c = Math.cos(i);
                return t[0] = n * c + o * u,
                t[1] = -n * u + o * c,
                t[2] = r * c + s * u,
                t[3] = -r * u + c * s,
                t[4] = c * a + u * l,
                t[5] = c * l - u * a,
                t
            },
            scale: function(t, e, i) {
                var n = i[0]
                  , r = i[1];
                return t[0] = e[0] * n,
                t[1] = e[1] * r,
                t[2] = e[2] * n,
                t[3] = e[3] * r,
                t[4] = e[4] * n,
                t[5] = e[5] * r,
                t
            },
            invert: function(t, e) {
                var i = e[0]
                  , n = e[2]
                  , r = e[4]
                  , a = e[1]
                  , o = e[3]
                  , s = e[5]
                  , l = i * o - a * n;
                return l ? (l = 1 / l,
                t[0] = o * l,
                t[1] = -a * l,
                t[2] = -n * l,
                t[3] = i * l,
                t[4] = (n * s - o * r) * l,
                t[5] = (a * r - i * s) * l,
                t) : null
            }
        };
        return e
    }),
    e(oi, [], function() {
        var t = typeof Float32Array === L ? Array : Float32Array
          , e = {
            create: function(e, i) {
                var n = new t(2);
                return n[0] = e || 0,
                n[1] = i || 0,
                n
            },
            copy: function(t, e) {
                return t[0] = e[0],
                t[1] = e[1],
                t
            },
            clone: function(e) {
                var i = new t(2);
                return i[0] = e[0],
                i[1] = e[1],
                i
            },
            set: function(t, e, i) {
                return t[0] = e,
                t[1] = i,
                t
            },
            add: function(t, e, i) {
                return t[0] = e[0] + i[0],
                t[1] = e[1] + i[1],
                t
            },
            scaleAndAdd: function(t, e, i, n) {
                return t[0] = e[0] + i[0] * n,
                t[1] = e[1] + i[1] * n,
                t
            },
            sub: function(t, e, i) {
                return t[0] = e[0] - i[0],
                t[1] = e[1] - i[1],
                t
            },
            len: function(t) {
                return Math.sqrt(this.lenSquare(t))
            },
            lenSquare: function(t) {
                return t[0] * t[0] + t[1] * t[1]
            },
            mul: function(t, e, i) {
                return t[0] = e[0] * i[0],
                t[1] = e[1] * i[1],
                t
            },
            div: function(t, e, i) {
                return t[0] = e[0] / i[0],
                t[1] = e[1] / i[1],
                t
            },
            dot: function(t, e) {
                return t[0] * e[0] + t[1] * e[1]
            },
            scale: function(t, e, i) {
                return t[0] = e[0] * i,
                t[1] = e[1] * i,
                t
            },
            normalize: function(t, i) {
                var n = e.len(i);
                return 0 === n ? (t[0] = 0,
                t[1] = 0) : (t[0] = i[0] / n,
                t[1] = i[1] / n),
                t
            },
            distance: function(t, e) {
                return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
            },
            distanceSquare: function(t, e) {
                return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
            },
            negate: function(t, e) {
                return t[0] = -e[0],
                t[1] = -e[1],
                t
            },
            lerp: function(t, e, i, n) {
                return t[0] = e[0] + n * (i[0] - e[0]),
                t[1] = e[1] + n * (i[1] - e[1]),
                t
            },
            applyTransform: function(t, e, i) {
                var n = e[0]
                  , r = e[1];
                return t[0] = i[0] * n + i[2] * r + i[4],
                t[1] = i[1] * n + i[3] * r + i[5],
                t
            },
            min: function(t, e, i) {
                return t[0] = Math.min(e[0], i[0]),
                t[1] = Math.min(e[1], i[1]),
                t
            },
            max: function(t, e, i) {
                return t[0] = Math.max(e[0], i[0]),
                t[1] = Math.max(e[1], i[1]),
                t
            }
        };
        return e[Ve] = e.len,
        e.lengthSquare = e.lenSquare,
        e.dist = e[Y],
        e.distSquare = e.distanceSquare,
        e
    }),
    e("echarts/coord/cartesian/Grid", [li, "exports", "../../util/layout", "../../coord/axisHelper", si, "./Cartesian2D", "./Axis2D", "./GridModel", "../../CoordinateSystem"], function(t) {
        function e(t, e, i) {
            return i[W]("grid", t.get("gridIndex")) === e
        }
        function i(t) {
            for (var e, i = t.model, n = i.getFormattedLabels(), r = 0; r < n[Ve]; r++)
                if (!t.isLabelIgnored(r)) {
                    var a = i.getTextRect(n[r]);
                    e ? e.union(a) : e = a
                }
            return e
        }
        function n(t, e, i) {
            this._coordsMap = {},
            this._coordsList = [],
            this._axesMap = {},
            this._axesList = [],
            this._initCartesian(t, e, i)
        }
        function r(t, e) {
            var i = t[$]()
              , n = i[0] + i[1];
            t.toGlobalCoord = "x" === t.dim ? function(t) {
                return t + e
            }
            : function(t) {
                return n - t + e
            }
            ,
            t.toLocalCoord = "x" === t.dim ? function(t) {
                return t - e
            }
            : function(t) {
                return n - t + e
            }
        }
        var a = t("../../util/layout")
          , o = t("../../coord/axisHelper")
          , s = t(si)
          , l = t("./Cartesian2D")
          , u = t("./Axis2D")
          , c = s.each
          , h = o.ifAxisCrossZero
          , d = o.niceScaleExtent;
        t("./GridModel");
        var f = n[ii];
        return f.type = "grid",
        f[fe] = function() {
            return this._rect
        }
        ,
        f[Je] = function(t, e) {
            function n() {
                c(s, function(t) {
                    var e = t.isHorizontal()
                      , i = e ? [0, o.width] : [0, o[He]]
                      , n = t[b] ? 1 : 0;
                    t.setExtent(i[n], i[1 - n]),
                    r(t, e ? o.x : o.y)
                })
            }
            var o = a[oe](t.getBoxLayoutParams(), {
                width: e[$e](),
                height: e[Ye]()
            });
            this._rect = o;
            var s = this._axesList;
            n(),
            t.get("containLabel") && (c(s, function(t) {
                if (!t.model.get("axisLabel.inside")) {
                    var e = i(t);
                    if (e) {
                        var n = t.isHorizontal() ? He : "width"
                          , r = t.model.get("axisLabel.margin");
                        o[n] -= e[n] + r,
                        "top" === t[re] ? o.y += e[He] + r : "left" === t[re] && (o.x += e.width + r)
                    }
                }
            }),
            n())
        }
        ,
        f[_] = function(t, e) {
            if (null != e) {
                var i = t + e;
                return this._axesMap[i]
            }
            for (var n = this._axesList, r = 0; r < n[Ve]; r++)
                if (n[r].dim === t)
                    return n[r]
        }
        ,
        f.getCartesian = function(t, e) {
            var i = "x" + t + "y" + e;
            return this._coordsMap[i]
        }
        ,
        f._initCartesian = function(t, i) {
            function n(t) {
                var e = s[t];
                for (var i in e) {
                    var n = e[i];
                    if (n && (n.type === x || !h(n)))
                        return !0
                }
                return !1
            }
            function r(n) {
                return function(r, l) {
                    if (e(r, t, i)) {
                        var c = r.get(re);
                        "x" === n ? ("top" !== c && c !== We && (c = We),
                        a[c] && (c = "top" === c ? We : "top")) : ("left" !== c && "right" !== c && (c = "left"),
                        a[c] && (c = "left" === c ? "right" : "left")),
                        a[c] = !0;
                        var h = new u(n,o.createScaleByModel(r),[0, 0],r.get("type"),c)
                          , d = h.type === x;
                        h.onBand = d && r.get("boundaryGap"),
                        h[b] = r.get(b),
                        h.onZero = r.get("axisLine.onZero"),
                        r.axis = h,
                        h.model = r,
                        h.index = l,
                        this._axesList.push(h),
                        this._axesMap[n + l] = h,
                        s[n][l] = h,
                        f[n]++
                    }
                }
            }
            var a = {
                left: !1,
                right: !1,
                top: !1,
                bottom: !1
            }
              , s = {
                x: {},
                y: {}
            }
              , f = {
                x: 0,
                y: 0
            };
            return i[je]("xAxis", r("x"), this),
            i[je]("yAxis", r("y"), this),
            f.x && f.y ? (c(s.x, function(t, e) {
                c(s.y, function(i, n) {
                    var r = "x" + e + "y" + n
                      , a = new l(r);
                    a.grid = this,
                    this._coordsMap[r] = a,
                    this._coordsList.push(a),
                    a.addAxis(t),
                    a.addAxis(i)
                }, this)
            }, this),
            this._updateCartesianFromSeries(i, t),
            c(s.x, function(t) {
                d(t, t.model)
            }),
            c(s.y, function(t) {
                d(t, t.model)
            }),
            c(s.x, function(t) {
                n("y") && (t.onZero = !1)
            }),
            void c(s.y, function(t) {
                n("x") && (t.onZero = !1)
            })) : (this._axesMap = {},
            void (this._axesList = []))
        }
        ,
        f._updateCartesianFromSeries = function(t, i) {
            function n(t, e, i, n) {
                c(n.getDimensionsOnAxis(i), function(i) {
                    e.scale.unionExtent(t.getDataExtent(i, e.scale.type !== y))
                })
            }
            t[Oe](function(r) {
                if ("cartesian2d" === r.get(de)) {
                    var a = r.get("xAxisIndex")
                      , o = r.get("yAxisIndex")
                      , s = t[W]("xAxis", a)
                      , l = t[W]("yAxis", o);
                    if (!e(s, i, t) || !e(l, i, t))
                        return;
                    var u = this.getCartesian(a, o)
                      , c = r[Pe]();
                    "list" === c.type && (n(c, u[_]("x"), "x", r),
                    n(c, u[_]("y"), "y", r))
                }
            }, this)
        }
        ,
        n[J] = function(t, e) {
            var i = [];
            return t[je]("grid", function(r, a) {
                var o = new n(r,t,e);
                o.name = "grid_" + a,
                o[Je](r, e),
                r[de] = o,
                i.push(o)
            }),
            t[Oe](function(e) {
                if ("cartesian2d" === e.get(de)) {
                    var n = e.get("xAxisIndex")
                      , r = t[W]("xAxis", n)
                      , a = i[r.get("gridIndex")];
                    e[de] = a.getCartesian(n, e.get("yAxisIndex"))
                }
            }),
            i
        }
        ,
        n[U] = l[ii][U],
        t("../../CoordinateSystem").register("grid", n),
        n
    }),
    e("echarts/chart/bar/BarSeries", [li, "../../model/Series", "../helper/createListFromArray"], function(t) {
        var e = t("../../model/Series")
          , i = t("../helper/createListFromArray");
        return e[Ze]({
            type: "series.bar",
            dependencies: ["grid", "polar"],
            getInitialData: function(t, e) {
                return i(t.data, this, e)
            },
            getMarkerPosition: function(t) {
                var e = this[de];
                if (e) {
                    var i = e[g](t)
                      , n = this[Pe]()
                      , r = n.getLayout("offset")
                      , a = n.getLayout("size")
                      , o = e.getBaseAxis().isHorizontal() ? 0 : 1;
                    return i[o] += r + a / 2,
                    i
                }
                return [0 / 0, 0 / 0]
            },
            defaultOption: {
                zlevel: 0,
                z: 2,
                coordinateSystem: "cartesian2d",
                legendHoverLink: !0,
                xAxisIndex: 0,
                yAxisIndex: 0,
                barMinHeight: 0,
                itemStyle: {
                    normal: {
                        barBorderColor: "#fff",
                        barBorderWidth: 0
                    },
                    emphasis: {
                        barBorderColor: "#fff",
                        barBorderWidth: 0
                    }
                }
            }
        })
    }),
    e("echarts/chart/bar/BarView", [li, si, v, "../../model/Model", "./barItemStyle", m], function(t) {
        function e(t, e) {
            var i = t.width > 0 ? 1 : -1
              , n = t[He] > 0 ? 1 : -1;
            e = Math.min(e, Math.abs(t.width), Math.abs(t[He])),
            t.x += i * e / 2,
            t.y += n * e / 2,
            t.width -= i * e,
            t[He] -= n * e
        }
        var i = t(si)
          , n = t(v);
        return i[Ze](t("../../model/Model")[ii], t("./barItemStyle")),
        t(m).extendChartView({
            type: "bar",
            render: function(t, e, i) {
                var n = t.get(de);
                return "cartesian2d" === n && this._renderOnCartesian(t, e, i),
                this.group
            },
            _renderOnCartesian: function(t) {
                function r(r, a) {
                    var s = o.getItemLayout(r)
                      , l = o[T](r).get(d) || 0;
                    e(s, l);
                    var u = new n.Rect({
                        shape: i[Ze]({}, s)
                    });
                    if (h) {
                        var f = u.shape
                          , p = c ? He : "width"
                          , m = {};
                        f[p] = 0,
                        m[p] = s[p],
                        n[a ? "updateProps" : "initProps"](u, {
                            shape: m
                        }, t)
                    }
                    return u
                }
                var a = this.group
                  , o = t[Pe]()
                  , s = this._data
                  , l = t[de]
                  , u = l.getBaseAxis()
                  , c = u.isHorizontal()
                  , h = t.get("animation")
                  , d = ["itemStyle", B, "barBorderWidth"];
                o.diff(s).add(function(t) {
                    if (o.hasValue(t)) {
                        var e = r(t);
                        o.setItemGraphicEl(t, e),
                        a.add(e)
                    }
                })[Fe](function(i, l) {
                    var u = s[O](l);
                    if (!o.hasValue(i))
                        return void a[Ne](u);
                    u || (u = r(i, !0));
                    var c = o.getItemLayout(i)
                      , h = o[T](i).get(d) || 0;
                    e(c, h),
                    n.updateProps(u, {
                        shape: c
                    }, t),
                    o.setItemGraphicEl(i, u),
                    a.add(u)
                })[Ne](function(e) {
                    var i = s[O](e);
                    i && (i.style.text = "",
                    n.updateProps(i, {
                        shape: {
                            width: 0
                        }
                    }, t, function() {
                        a[Ne](i)
                    }))
                }).execute(),
                this._updateStyle(t, o, c),
                this._data = o
            },
            _updateStyle: function(t, e, r) {
                function a(t, e, i, r, a) {
                    n.setText(t, e, i),
                    t.text = r,
                    "outside" === t.textPosition && (t.textPosition = a)
                }
                e[I](function(o, s) {
                    var l = e[T](s)
                      , u = e[p](s, "color")
                      , c = e.getItemLayout(s)
                      , h = l[Qe]("itemStyle.normal")
                      , d = l[Qe]("itemStyle.emphasis").getItemStyle();
                    o[z]("r", h.get("barBorderRadius") || 0),
                    o[ne](i[Be]({
                        fill: u
                    }, h.getBarItemStyle()));
                    var f = r ? c[He] > 0 ? We : "top" : c.width > 0 ? "left" : "right"
                      , m = l[Qe]("label.normal")
                      , v = l[Qe]("label.emphasis")
                      , g = o.style;
                    m.get("show") ? a(g, m, u, t.getFormattedLabel(s, B) || t[X](s), f) : g.text = "",
                    v.get("show") ? a(d, v, u, t.getFormattedLabel(s, E) || t[X](s), f) : d.text = "",
                    n[Z](o, d)
                })
            },
            remove: function(t) {
                var e = this.group;
                t.get("animation") ? this._data && this._data[I](function(i) {
                    i.style.text = "",
                    n.updateProps(i, {
                        shape: {
                            width: 0
                        }
                    }, t, function() {
                        e[Ne](i)
                    })
                }) : e[pe]()
            }
        })
    }),
    e("echarts/layout/barGrid", [li, si, ee], function(t) {
        function e(t) {
            return t.get("stack") || "__ec_stack_" + t[Te]
        }
        function i(t) {
            var i = {};
            r.each(t, function(t) {
                var n = t[de]
                  , r = n.getBaseAxis()
                  , a = i[r.index] || {
                    remainedWidth: r.getBandWidth(),
                    autoWidthCount: 0,
                    categoryGap: "20%",
                    gap: "30%",
                    axis: r,
                    stacks: {}
                }
                  , o = a.stacks;
                i[r.index] = a;
                var s = e(t);
                o[s] || a.autoWidthCount++,
                o[s] = o[s] || {
                    width: 0,
                    maxWidth: 0
                };
                var l = t.get("barWidth")
                  , u = t.get("barMaxWidth")
                  , c = t.get("barGap")
                  , h = t.get("barCategoryGap");
                l && !o[s].width && (l = Math.min(a.remainedWidth, l),
                o[s].width = l,
                a.remainedWidth -= l),
                u && (o[s].maxWidth = u),
                null != c && (a.gap = c),
                null != h && (a.categoryGap = h)
            });
            var n = {};
            return r.each(i, function(t, e) {
                n[e] = {};
                var i = t.stacks
                  , a = t.axis
                  , s = a.getBandWidth()
                  , l = o(t.categoryGap, s)
                  , u = o(t.gap, 1)
                  , c = t.remainedWidth
                  , h = t.autoWidthCount
                  , d = (c - l) / (h + (h - 1) * u);
                d = Math.max(d, 0),
                r.each(i, function(t) {
                    var e = t.maxWidth;
                    !t.width && e && d > e && (e = Math.min(e, c),
                    c -= e,
                    t.width = e,
                    h--)
                }),
                d = (c - l) / (h + (h - 1) * u),
                d = Math.max(d, 0);
                var f, p = 0;
                r.each(i, function(t) {
                    t.width || (t.width = d),
                    f = t,
                    p += t.width * (1 + u)
                }),
                f && (p -= f.width * u);
                var m = -p / 2;
                r.each(i, function(t, i) {
                    n[e][i] = n[e][i] || {
                        offset: m,
                        width: t.width
                    },
                    m += t.width * (1 + u)
                })
            }),
            n
        }
        function n(t, n) {
            var a = i(r[ri](n.getSeriesByType(t), function(t) {
                return !n.isSeriesFiltered(t) && t[de] && "cartesian2d" === t[de].type
            }))
              , o = {};
            n.eachSeriesByType(t, function(t) {
                var i = t[Pe]()
                  , n = t[de]
                  , r = n.getBaseAxis()
                  , s = e(t)
                  , l = a[r.index][s]
                  , u = l.offset
                  , c = l.width
                  , h = n.getOtherAxis(r)
                  , d = t.get("barMinHeight") || 0
                  , p = r.onZero ? h.toGlobalCoord(h[f](0)) : h.getGlobalExtent()[0]
                  , m = n.dataToPoints(i, !0);
                o[s] = o[s] || [],
                i.setLayout({
                    offset: u,
                    size: c
                }),
                i.each(h.dim, function(t, e) {
                    if (!isNaN(t)) {
                        o[s][e] || (o[s][e] = {
                            p: p,
                            n: p
                        });
                        var n, r, a, l, f = t >= 0 ? "p" : "n", v = m[e], g = o[s][e][f];
                        h.isHorizontal() ? (n = g,
                        r = v[1] + u,
                        a = v[0] - g,
                        l = c,
                        Math.abs(a) < d && (a = (0 > a ? -1 : 1) * d),
                        o[s][e][f] += a) : (n = v[0] + u,
                        r = g,
                        a = c,
                        l = v[1] - g,
                        Math.abs(l) < d && (l = (0 >= l ? -1 : 1) * d),
                        o[s][e][f] += l),
                        i.setItemLayout(e, {
                            x: n,
                            y: r,
                            width: a,
                            height: l
                        })
                    }
                }, !0)
            }, this)
        }
        var r = t(si)
          , a = t(ee)
          , o = a[S];
        return n
    }),
    e("echarts/component/axis", [li, "../coord/cartesian/AxisModel", "./axis/AxisView"], function(t) {
        t("../coord/cartesian/AxisModel"),
        t("./axis/AxisView")
    }),
    e("echarts/chart/line/LineSeries", [li, "../helper/createListFromArray", "../../model/Series"], function(t) {
        var e = t("../helper/createListFromArray")
          , i = t("../../model/Series");
        return i[Ze]({
            type: "series.line",
            dependencies: ["grid", "polar"],
            getInitialData: function(t, i) {
                return e(t.data, this, i)
            },
            defaultOption: {
                zlevel: 0,
                z: 2,
                coordinateSystem: "cartesian2d",
                legendHoverLink: !0,
                hoverAnimation: !0,
                xAxisIndex: 0,
                yAxisIndex: 0,
                polarIndex: 0,
                clipOverflow: !0,
                label: {
                    normal: {
                        position: "top"
                    },
                    emphasis: {
                        position: "top"
                    }
                },
                lineStyle: {
                    normal: {
                        width: 2,
                        type: "solid"
                    }
                },
                symbol: "emptyCircle",
                symbolSize: 4,
                showSymbol: !0,
                animationEasing: "linear"
            }
        })
    }),
    e("echarts/chart/line/LineView", [li, si, "../helper/SymbolDraw", "../helper/Symbol", "./lineAnimationDiff", v, "./poly", "../../view/Chart"], function(t) {
        function e(t, e) {
            if (t[Ve] === e[Ve]) {
                for (var i = 0; i < t[Ve]; i++) {
                    var n = t[i]
                      , r = e[i];
                    if (n[0] !== r[0] || n[1] !== r[1])
                        return
                }
                return !0
            }
        }
        function i(t) {
            return typeof t === ge ? t : t ? .3 : 0
        }
        function n(t) {
            var e = t.getGlobalExtent();
            if (t.onBand) {
                var i = t.getBandWidth() / 2 - 1
                  , n = e[1] > e[0] ? 1 : -1;
                e[0] += n * i,
                e[1] -= n * i
            }
            return e
        }
        function r(t) {
            return t >= 0 ? 1 : -1
        }
        function a(t, e) {
            var i = t.getBaseAxis()
              , n = t.getOtherAxis(i)
              , a = i.onZero ? 0 : n.scale[$]()[0]
              , o = n.dim
              , s = "x" === o || o === d ? 1 : 0;
            return e[h]([o], function(n, l) {
                for (var u, c = e.stackedOn; c && r(c.get(o, l)) === r(n); ) {
                    u = c;
                    break
                }
                var h = [];
                return h[s] = e.get(i.dim, l),
                h[1 - s] = u ? u.get(o, l, !0) : a,
                t[g](h)
            }, !0)
        }
        function o(t, e) {
            return null != e.dataIndex ? e.dataIndex : null != e.name ? t.indexOfName(e.name) : void 0
        }
        function s(t, e, i) {
            var r = n(t[_]("x"))
              , a = n(t[_]("y"))
              , o = t.getBaseAxis().isHorizontal()
              , s = r[0]
              , l = a[0]
              , u = r[1] - s
              , c = a[1] - l;
            i.get("clipOverflow") || (o ? (l -= c,
            c *= 3) : (s -= u,
            u *= 3));
            var h = new w.Rect({
                shape: {
                    x: s,
                    y: l,
                    width: u,
                    height: c
                }
            });
            return e && (h.shape[o ? "width" : He] = 0,
            w.initProps(h, {
                shape: {
                    width: u,
                    height: c
                }
            }, i)),
            h
        }
        function l(t, e, i) {
            var n = t.getAngleAxis()
              , r = t.getRadiusAxis()
              , a = r[$]()
              , o = n[$]()
              , s = Math.PI / 180
              , l = new w.Sector({
                shape: {
                    cx: t.cx,
                    cy: t.cy,
                    r0: a[0],
                    r: a[1],
                    startAngle: -o[0] * s,
                    endAngle: -o[1] * s,
                    clockwise: n[b]
                }
            });
            return e && (l.shape.endAngle = -o[0] * s,
            w.initProps(l, {
                shape: {
                    endAngle: -o[1] * s
                }
            }, i)),
            l
        }
        function u(t, e, i) {
            return "polar" === t.type ? l(t, e, i) : s(t, e, i)
        }
        var f = t(si)
          , p = t("../helper/SymbolDraw")
          , m = t("../helper/Symbol")
          , x = t("./lineAnimationDiff")
          , w = t(v)
          , M = t("./poly")
          , S = t("../../view/Chart");
        return S[Ze]({
            type: "line",
            init: function() {
                var t = new w.Group
                  , e = new p;
                this.group.add(e.group),
                this._symbolDraw = e,
                this._lineGroup = t
            },
            render: function(t, n, r) {
                var o = t[de]
                  , s = this.group
                  , l = t[Pe]()
                  , d = t[Qe]("lineStyle.normal")
                  , p = t[Qe]("areaStyle.normal")
                  , m = l[h](l.getItemLayout, !0)
                  , v = "polar" === o.type
                  , g = this._coordSys
                  , y = this._symbolDraw
                  , x = this._polyline
                  , _ = this._polygon
                  , b = this._lineGroup
                  , w = t.get("animation")
                  , M = !p.isEmpty()
                  , S = a(o, l)
                  , C = t.get("showSymbol")
                  , T = C && !v && !t.get("showAllSymbol") && this._getSymbolIgnoreFunc(l, o)
                  , A = this._data;
                A && A[I](function(t, e) {
                    t.__temp && (s[Ne](t),
                    A.setItemGraphicEl(e, null))
                }),
                C || y[Ne](),
                s.add(b),
                x && g.type === o.type ? (M && !_ ? _ = this._newPolygon(m, S, o, w) : _ && !M && (b[Ne](_),
                _ = this._polygon = null),
                b.setClipPath(u(o, !1, t)),
                C && y[c](l, T),
                l[I](function(t) {
                    t.stopAnimation(!0)
                }),
                e(this._stackedOnPoints, S) && e(this._points, m) || (w ? this._updateAnimation(l, S, o, r) : (x[z]({
                    points: m
                }),
                _ && _[z]({
                    points: m,
                    stackedOnPoints: S
                })))) : (C && y[c](l, T),
                x = this._newPolyline(m, o, w),
                M && (_ = this._newPolygon(m, S, o, w)),
                b.setClipPath(u(o, !0, t))),
                x[ne](f[Be](d.getLineStyle(), {
                    stroke: l.getVisual("color"),
                    lineJoin: "bevel"
                }));
                var L = t.get("smooth");
                if (L = i(t.get("smooth")),
                x[z]({
                    smooth: L,
                    smoothMonotone: t.get("smoothMonotone")
                }),
                _) {
                    var k = l.stackedOn
                      , P = 0;
                    if (_.style[ie] = .7,
                    _[ne](f[Be](p.getAreaStyle(), {
                        fill: l.getVisual("color"),
                        lineJoin: "bevel"
                    })),
                    k) {
                        var D = k[Ae];
                        P = i(D.get("smooth"))
                    }
                    _[z]({
                        smooth: L,
                        stackedOnSmooth: P,
                        smoothMonotone: t.get("smoothMonotone")
                    })
                }
                this._data = l,
                this._coordSys = o,
                this._stackedOnPoints = S,
                this._points = m
            },
            highlight: function(t, e, i, n) {
                var r = t[Pe]()
                  , a = o(r, n);
                if (null != a && a >= 0) {
                    var s = r[O](a);
                    if (!s) {
                        var l = r.getItemLayout(a);
                        s = new m(r,a,i),
                        s[re] = l,
                        s.setZ(t.get(Se), t.get("z")),
                        s[qe] = isNaN(l[0]) || isNaN(l[1]),
                        s.__temp = !0,
                        r.setItemGraphicEl(a, s),
                        s.stopSymbolAnimation(!0),
                        this.group.add(s)
                    }
                    s.highlight()
                } else
                    S[ii].highlight.call(this, t, e, i, n)
            },
            downplay: function(t, e, i, n) {
                var r = t[Pe]()
                  , a = o(r, n);
                if (null != a && a >= 0) {
                    var s = r[O](a);
                    s && (s.__temp ? (r.setItemGraphicEl(a, null),
                    this.group[Ne](s)) : s.downplay())
                } else
                    S[ii].downplay.call(this, t, e, i, n)
            },
            _newPolyline: function(t) {
                var e = this._polyline;
                return e && this._lineGroup[Ne](e),
                e = new M.Polyline({
                    shape: {
                        points: t
                    },
                    silent: !0,
                    z2: 10
                }),
                this._lineGroup.add(e),
                this._polyline = e,
                e
            },
            _newPolygon: function(t, e) {
                var i = this._polygon;
                return i && this._lineGroup[Ne](i),
                i = new M.Polygon({
                    shape: {
                        points: t,
                        stackedOnPoints: e
                    },
                    silent: !0
                }),
                this._lineGroup.add(i),
                this._polygon = i,
                i
            },
            _getSymbolIgnoreFunc: function(t, e) {
                var i = e.getAxesByScale(y)[0];
                return i && i.isLabelIgnored ? f.bind(i.isLabelIgnored, i) : void 0
            },
            _updateAnimation: function(t, e, i) {
                var n = this._polyline
                  , r = this._polygon
                  , a = t[Ae]
                  , o = x(this._data, t, this._stackedOnPoints, e, this._coordSys, i);
                n.shape.points = o.current,
                w.updateProps(n, {
                    shape: {
                        points: o.next
                    }
                }, a),
                r && (r[z]({
                    points: o.current,
                    stackedOnPoints: o.stackedOnCurrent
                }),
                w.updateProps(r, {
                    shape: {
                        points: o.next,
                        stackedOnPoints: o.stackedOnNext
                    }
                }, a));
                for (var s = [], l = o.status, u = 0; u < l[Ve]; u++) {
                    var c = l[u].cmd;
                    if ("=" === c) {
                        var h = t[O](l[u].idx1);
                        h && s.push({
                            el: h,
                            ptIdx: u
                        })
                    }
                }
                n.animators && n.animators[Ve] && n.animators[0].during(function() {
                    for (var t = 0; t < s[Ve]; t++) {
                        var e = s[t].el;
                        e.attr(re, n.shape.points[s[t].ptIdx])
                    }
                })
            },
            remove: function() {
                this._lineGroup[pe](),
                this._symbolDraw[Ne](!0),
                this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null
            }
        })
    }),
    e("echarts/visual/symbol", [li], function() {
        return function(t, e, i, n) {
            n.eachRawSeriesByType(t, function(t) {
                var r = t[Pe]()
                  , a = t.get(u) || e
                  , o = t.get(l);
                r.setVisual({
                    legendSymbol: i || a,
                    symbol: a,
                    symbolSize: o
                }),
                n.isSeriesFiltered(t) || (typeof o === xe && r.each(function(e) {
                    var i = t[X](e)
                      , n = t[Ce](e);
                    r[A](e, l, o(i, n))
                }),
                r.each(function(t) {
                    var e = r[T](t)
                      , i = e.get(u, !0)
                      , n = e.get(l, !0);
                    null != i && r[A](t, u, i),
                    null != n && r[A](t, l, n)
                }))
            })
        }
    }),
    e("echarts/layout/points", [li], function() {
        return function(t, e) {
            e.eachSeriesByType(t, function(t) {
                var e = t[Pe]()
                  , i = t[de]
                  , n = i[U];
                e.each(n, function(t, n, r) {
                    var a;
                    a = isNaN(t) || isNaN(n) ? [0 / 0, 0 / 0] : i[g]([t, n]),
                    e.setItemLayout(r, a)
                }, !0)
            })
        }
    }),
    e("echarts/util/layout", [li, si, "zrender/core/BoundingRect", "./number", "./format"], function(t) {
        function e(t, e, i, n, r) {
            var a = 0
              , o = 0;
            null == n && (n = 1 / 0),
            null == r && (r = 1 / 0);
            var l = 0;
            e.eachChild(function(u, c) {
                var h, d, f = u[re], p = u[se](), m = e.childAt(c + 1), v = m && m[se]();
                if (t === s) {
                    var g = p.width + (v ? -v.x + p.x : 0);
                    h = a + g,
                    h > n || u.newline ? (a = 0,
                    h = g,
                    o += l + i,
                    l = p[He]) : l = Math.max(l, p[He])
                } else {
                    var y = p[He] + (v ? -v.y + p.y : 0);
                    d = o + y,
                    d > r || u.newline ? (a += l + i,
                    o = 0,
                    d = y,
                    l = p.width) : l = Math.max(l, p.width)
                }
                u.newline || (f[0] = a,
                f[1] = o,
                t === s ? a = h + i : o = d + i)
            })
        }
        var i = t(si)
          , n = t("zrender/core/BoundingRect")
          , r = t("./number")
          , a = t("./format")
          , o = r[S]
          , l = i.each
          , u = {};
        return u.box = e,
        u.vbox = i.curry(e, "vertical"),
        u.hbox = i.curry(e, s),
        u.getAvailableSize = function(t, e, i) {
            var n = e.width
              , r = e[He]
              , s = o(t.x, n)
              , l = o(t.y, r)
              , u = o(t.x2, n)
              , c = o(t.y2, r);
            return (isNaN(s) || isNaN(parseFloat(t.x))) && (s = 0),
            (isNaN(u) || isNaN(parseFloat(t.x2))) && (u = n),
            (isNaN(l) || isNaN(parseFloat(t.y))) && (l = 0),
            (isNaN(c) || isNaN(parseFloat(t.y2))) && (c = r),
            i = a.normalizeCssArray(i || 0),
            {
                width: Math.max(u - s - i[1] - i[3], 0),
                height: Math.max(c - l - i[0] - i[2], 0)
            }
        }
        ,
        u[oe] = function(t, e, i) {
            i = a.normalizeCssArray(i || 0);
            var r = e.width
              , s = e[He]
              , l = o(t.left, r)
              , u = o(t.top, s)
              , c = o(t.right, r)
              , h = o(t[We], s)
              , d = o(t.width, r)
              , f = o(t[He], s)
              , p = i[2] + i[0]
              , m = i[1] + i[3]
              , v = t.aspect;
            switch (isNaN(d) && (d = r - c - m - l),
            isNaN(f) && (f = s - h - p - u),
            isNaN(d) && isNaN(f) && (v > r / s ? d = .8 * r : f = .8 * s),
            null != v && (isNaN(d) && (d = v * f),
            isNaN(f) && (f = d / v)),
            isNaN(l) && (l = r - c - d - m),
            isNaN(u) && (u = s - h - f - p),
            t.left || t.right) {
            case ae:
                l = r / 2 - d / 2 - i[3];
                break;
            case "right":
                l = r - d - m
            }
            switch (t.top || t[We]) {
            case M:
            case ae:
                u = s / 2 - f / 2 - i[0];
                break;
            case We:
                u = s - f - p
            }
            l = l || 0,
            u = u || 0,
            isNaN(d) && (d = r - l - (c || 0)),
            isNaN(f) && (f = s - u - (h || 0));
            var g = new n(l + i[3],u + i[0],d,f);
            return g.margin = i,
            g
        }
        ,
        u.positionGroup = function(t, e, n, r) {
            var a = t[se]();
            e = i[Ze](i.clone(e), {
                width: a.width,
                height: a[He]
            }),
            e = u[oe](e, n, r),
            t[re] = [e.x - a.x, e.y - a.y]
        }
        ,
        u.mergeLayoutParam = function(t, e, n) {
            function r(i) {
                var r = {}
                  , s = 0
                  , u = {}
                  , c = 0
                  , h = n.ignoreSize ? 1 : 2;
                if (l(i, function(e) {
                    u[e] = t[e]
                }),
                l(i, function(t) {
                    a(e, t) && (r[t] = u[t] = e[t]),
                    o(r, t) && s++,
                    o(u, t) && c++
                }),
                c !== h && s) {
                    if (h > c) {
                        var d = 0;
                        return l(i, function(t) {
                            "auto" === u[t] && (h - c > d ? d++ : u[t] = null)
                        }),
                        u
                    }
                    if (s >= h)
                        return r;
                    for (var f = 0; f < i[Ve]; f++) {
                        var p = i[f];
                        if (!a(r, p) && a(t, p)) {
                            r[p] = t[p];
                            break
                        }
                    }
                    return r
                }
                return u
            }
            function a(t, e) {
                return t.hasOwnProperty(e)
            }
            function o(t, e) {
                return null != t[e] && "auto" !== t[e]
            }
            function s(t, e, i) {
                l(t, function(t) {
                    e[t] = i[t]
                })
            }
            !i[Ge](n) && (n = {});
            var u = ["width", "left", "right"]
              , c = [He, "top", We]
              , h = r(u)
              , d = r(c);
            s(u, t, h),
            s(c, t, d)
        }
        ,
        u.getLayoutParams = function(t) {
            var e = {};
            return t && l(["left", "right", "top", We, "width", He], function(i) {
                t.hasOwnProperty(i) && (e[i] = t[i])
            }),
            e
        }
        ,
        u
    }),
    e("echarts/chart/heatmap/HeatmapSeries", [li, "../../model/Series", "../helper/createListFromArray"], function(t) {
        var e = t("../../model/Series")
          , i = t("../helper/createListFromArray");
        return e[Ze]({
            type: "series.heatmap",
            getInitialData: function(t, e) {
                return i(t.data, this, e)
            },
            defaultOption: {
                coordinateSystem: "cartesian2d",
                zlevel: 0,
                z: 2,
                xAxisIndex: 0,
                yAxisIndex: 0,
                geoIndex: 0,
                blurSize: 30,
                pointSize: 20
            }
        })
    }),
    e("echarts/chart/heatmap/HeatmapView", [li, v, "./HeatmapLayer", si, m], function(t) {
        function e(t, e, i) {
            var n = t[1] - t[0];
            e = s.map(e, function(e) {
                return {
                    interval: [(e[o][0] - t[0]) / n, (e[o][1] - t[0]) / n]
                }
            });
            var r = e[Ve]
              , a = 0;
            return function(t) {
                for (var n = a; r > n; n++) {
                    var s = e[n][o];
                    if (s[0] <= t && t <= s[1]) {
                        a = n;
                        break
                    }
                }
                if (n === r)
                    for (var n = a - 1; n >= 0; n--) {
                        var s = e[n][o];
                        if (s[0] <= t && t <= s[1]) {
                            a = n;
                            break
                        }
                    }
                return n >= 0 && r > n && i[n]
            }
        }
        function i(t, e) {
            var i = t[1] - t[0];
            return e = [(e[0] - t[0]) / i, (e[1] - t[0]) / i],
            function(t) {
                return t >= e[0] && t <= e[1]
            }
        }
        function n(t) {
            var e = t[U];
            return "lng" === e[0] && "lat" === e[1]
        }
        var r = t(v)
          , a = t("./HeatmapLayer")
          , s = t(si);
        return t(m).extendChartView({
            type: "heatmap",
            render: function(t, e, i) {
                var r;
                if (e[je]("visualMap", function(e) {
                    e.eachTargetSeries(function(i) {
                        i === t && (r = e)
                    })
                }),
                !r)
                    throw new Error("Heatmap must use with visualMap");
                this.group[pe]();
                var a = t[de];
                "cartesian2d" === a.type ? this._renderOnCartesian(a, t, i) : n(a) && this._renderOnGeo(a, t, r, i)
            },
            _renderOnCartesian: function(t, e) {
                var i = t[_]("x")
                  , n = t[_]("y")
                  , a = this.group;
                if (i.type !== x || n.type !== x)
                    throw new Error("Heatmap on cartesian must have two category axes");
                if (!i.onBand || !n.onBand)
                    throw new Error("Heatmap on cartesian must have two axes with boundaryGap true");
                var o = i.getBandWidth()
                  , s = n.getBandWidth()
                  , l = e[Pe]();
                l.each(["x", "y", "z"], function(i, n, u, c) {
                    var h = l[T](c)
                      , d = t[g]([i, n]);
                    if (!isNaN(u)) {
                        var f = new r.Rect({
                            shape: {
                                x: d[0] - o / 2,
                                y: d[1] - s / 2,
                                width: o,
                                height: s
                            },
                            style: {
                                fill: l[p](c, "color")
                            }
                        })
                          , m = h[Qe]("itemStyle.normal").getItemStyle(["color"])
                          , v = h[Qe]("itemStyle.emphasis").getItemStyle()
                          , y = h[Qe]("label.normal")
                          , x = h[Qe]("label.emphasis")
                          , _ = e[X](c)
                          , b = "-";
                        _ && null != _[2] && (b = _[2]),
                        y.get("show") && (r.setText(m, y),
                        m.text = e.getFormattedLabel(c, B) || b),
                        x.get("show") && (r.setText(v, x),
                        v.text = e.getFormattedLabel(c, E) || b),
                        f[ne](m),
                        r[Z](f, v),
                        a.add(f),
                        l.setItemGraphicEl(c, f)
                    }
                })
            },
            _renderOnGeo: function(t, n, o, s) {
                var l = o.targetVisuals.inRange
                  , u = o.targetVisuals.outOfRange
                  , c = n[Pe]()
                  , d = this._hmLayer || this._hmLayer || new a;
                d.blurSize = n.get("blurSize"),
                d.pointSize = n.get("pointSize");
                var f = t.getViewRect().clone()
                  , p = t.getRoamTransform();
                f[F](p);
                var m = Math.max(f.x, 0)
                  , v = Math.max(f.y, 0)
                  , y = Math.min(f.width + f.x, s[$e]())
                  , x = Math.min(f[He] + f.y, s[Ye]())
                  , _ = y - m
                  , b = x - v
                  , w = c[h](["lng", "lat", "value"], function(e, i, n) {
                    var r = t[g]([e, i]);
                    return r[0] -= m,
                    r[1] -= v,
                    r.push(n),
                    r
                })
                  , M = o[$]()
                  , S = "visualMap.continuous" === o.type ? i(M, o[Ke].range) : e(M, o.getPieceList(), o[Ke].selected);
                d[Fe](w, _, b, l.color.getNormalizer(), {
                    inRange: l.color.getColorMapper(),
                    outOfRange: u.color.getColorMapper()
                }, S);
                var C = new r.Image({
                    style: {
                        width: _,
                        height: b,
                        x: m,
                        y: v,
                        image: d[ti]
                    },
                    silent: !0
                });
                this.group.add(C)
            }
        })
    }),
    e("echarts/component/legend/LegendModel", [li, si, "../../model/Model", m], function(t) {
        var e = t(si)
          , i = t("../../model/Model");
        return t(m).extendComponentModel({
            type: "legend",
            dependencies: [Ie],
            layoutMode: {
                type: "box",
                ignoreSize: !0
            },
            init: function(t, e, i) {
                this.mergeDefaultAndTheme(t, i),
                t.selected = t.selected || {},
                this._updateData(i);
                var n = this._data
                  , r = this[Ke].selected;
                if (n[0] && "single" === this.get("selectedMode")) {
                    var a = !1;
                    for (var o in r)
                        r[o] && (this.select(o),
                        a = !0);
                    !a && this.select(n[0].get("name"))
                }
            },
            mergeOption: function(t) {
                this.$superCall("mergeOption", t),
                this._updateData(this[q])
            },
            _updateData: function(t) {
                var n = e.map(this.get("data") || [], function(t) {
                    return typeof t === ei && (t = {
                        name: t
                    }),
                    new i(t,this,this[q])
                }, this);
                this._data = n;
                var r = e.map(t.getSeries(), function(t) {
                    return t.name
                });
                t[Oe](function(t) {
                    if (t.legendDataProvider) {
                        var e = t.legendDataProvider();
                        r = r[H](e[h](e[j]))
                    }
                }),
                this._availableNames = r
            },
            getData: function() {
                return this._data
            },
            select: function(t) {
                var i = this[Ke].selected
                  , n = this.get("selectedMode");
                if ("single" === n) {
                    var r = this._data;
                    e.each(r, function(t) {
                        i[t.get("name")] = !1
                    })
                }
                i[t] = !0
            },
            unSelect: function(t) {
                "single" !== this.get("selectedMode") && (this[Ke].selected[t] = !1)
            },
            toggleSelected: function(t) {
                var e = this[Ke].selected;
                t in e || (e[t] = !0),
                this[e[t] ? "unSelect" : "select"](t)
            },
            isSelected: function(t) {
                var i = this[Ke].selected;
                return !(t in i && !i[t]) && e[_e](this._availableNames, t) >= 0
            },
            defaultOption: {
                zlevel: 0,
                z: 4,
                show: !0,
                orient: "horizontal",
                left: "center",
                top: "top",
                align: "auto",
                backgroundColor: "rgba(0,0,0,0)",
                borderColor: "#ccc",
                borderWidth: 0,
                padding: 5,
                itemGap: 10,
                itemWidth: 25,
                itemHeight: 14,
                textStyle: {
                    color: "#333"
                },
                selectedMode: !0
            }
        })
    }),
    e("echarts/component/legend/legendAction", [li, m, si], function(t) {
        function e(t, e, i) {
            var r, a = {}, o = "toggleSelected" === t;
            return i[je]("legend", function(i) {
                o && null != r ? i[r ? "select" : "unSelect"](e.name) : (i[t](e.name),
                r = i.isSelected(e.name));
                var s = i[Pe]();
                n.each(s, function(t) {
                    var e = t.get("name");
                    if ("\n" !== e && "" !== e) {
                        var n = i.isSelected(e);
                        a[e] = e in a ? a[e] && n : n
                    }
                })
            }),
            {
                name: e.name,
                selected: a
            }
        }
        var i = t(m)
          , n = t(si);
        i.registerAction("legendToggleSelect", "legendselectchanged", n.curry(e, "toggleSelected")),
        i.registerAction("legendSelect", "legendselected", n.curry(e, "select")),
        i.registerAction("legendUnSelect", "legendunselected", n.curry(e, "unSelect"))
    }),
    e("echarts/component/legend/legendFilter", [], function() {
        return function(t) {
            var e = t.findComponents({
                mainType: "legend"
            });
            e && e[Ve] && t.filterSeries(function(t) {
                for (var i = 0; i < e[Ve]; i++)
                    if (!e[i].isSelected(t.name))
                        return !1;
                return !0
            })
        }
    }),
    e("echarts/component/legend/LegendView", [li, si, "../../util/symbol", v, "../helper/listComponent", m], function(t) {
        function e(t, e) {
            e[Ee]({
                type: "legendToggleSelect",
                name: t
            })
        }
        function i(t, e, i) {
            t.get("legendHoverLink") && i[Ee]({
                type: "highlight",
                seriesName: t.name,
                name: e
            })
        }
        function n(t, e, i) {
            t.get("legendHoverLink") && i[Ee]({
                type: "downplay",
                seriesName: t.name,
                name: e
            })
        }
        var r = t(si)
          , o = t("../../util/symbol")
          , s = t(v)
          , l = t("../helper/listComponent")
          , c = r.curry
          , h = "#ccc";
        return t(m)[ye]({
            type: "legend",
            init: function() {
                this._symbolTypeStore = {}
            },
            render: function(t, o, d) {
                var f = this.group;
                if (f[pe](),
                t.get("show")) {
                    var m = t.get("selectedMode")
                      , v = t.get("itemWidth")
                      , g = t.get("itemHeight")
                      , y = t.get("align");
                    "auto" === y && (y = "right" === t.get("left") && "vertical" === t.get(a) ? "right" : "left");
                    var x = {}
                      , _ = {};
                    r.each(t[Pe](), function(r) {
                        var a = r.get("name");
                        ("" === a || "\n" === a) && f.add(new s.Group({
                            newline: !0
                        }));
                        var l = o.getSeriesByName(a)[0];
                        if (x[a] = r,
                        l && !_[a]) {
                            var p = l[Pe]()
                              , b = p.getVisual("color");
                            t.isSelected(a) || (b = h),
                            typeof b === xe && (b = b(l[Ce](0)));
                            var w = p.getVisual("legendSymbol") || "roundRect"
                              , M = p.getVisual(u)
                              , S = this._createItem(a, r, t, w, M, v, g, y, b, m);
                            S.on("click", c(e, a, d)).on(ke, c(i, l, "", d)).on(Le, c(n, l, "", d)),
                            _[a] = !0
                        }
                    }, this),
                    o.eachRawSeries(function(r) {
                        if (r.legendDataProvider) {
                            var a = r.legendDataProvider();
                            a.each(function(o) {
                                var s = a[j](o);
                                if (x[s] && !_[s]) {
                                    var l = a[p](o, "color");
                                    t.isSelected(s) || (l = h);
                                    var u = "roundRect"
                                      , f = this._createItem(s, x[s], t, u, null, v, g, y, l, m);
                                    f.on("click", c(e, s, d)).on(ke, c(i, r, s, d)).on(Le, c(n, r, s, d)),
                                    _[s] = !0
                                }
                            }, !1, this)
                        }
                    }, this),
                    l.layout(f, t, d),
                    l.addBackground(f, t)
                }
            },
            _createItem: function(t, e, i, n, r, a, l, u, c, h) {
                var d = new s.Group
                  , f = e[Qe](he)
                  , p = e.get("icon");
                if (n = p || n,
                d.add(o.createSymbol(n, 0, 0, a, l, c)),
                !p && r && r !== n && "none" != r) {
                    var m = .8 * l;
                    d.add(o.createSymbol(r, (a - m) / 2, (l - m) / 2, m, m, c))
                }
                var v = "left" === u ? a + 5 : -5
                  , g = u
                  , y = i.get("formatter");
                typeof y === ei && y ? t = y[we]("{name}", t) : typeof y === xe && (t = y(t));
                var x = new s.Text({
                    style: {
                        text: t,
                        x: v,
                        y: l / 2,
                        fill: f[le](),
                        textFont: f[ue](),
                        textAlign: g,
                        textBaseline: "middle"
                    }
                });
                return d.add(x),
                d.add(new s.Rect({
                    shape: d[se](),
                    invisible: !0
                })),
                d.eachChild(function(t) {
                    t.silent = !h
                }),
                this.group.add(d),
                d
            }
        })
    }),
    e("echarts/component/marker/MarkLineModel", [li, "../../util/model", m], function(t) {
        var e = t("../../util/model")
          , i = t(m).extendComponentModel({
            type: "markLine",
            dependencies: [Ie, "grid", "polar"],
            init: function(t, e, i, n) {
                this.mergeDefaultAndTheme(t, i),
                this.mergeOption(t, i, n.createdBySelf, !0)
            },
            mergeOption: function(t, n, r, a) {
                r || n[Oe](function(t) {
                    var r = t.get("markLine")
                      , o = t.markLineModel;
                    if (!r || !r.data)
                        return void (t.markLineModel = null);
                    if (o)
                        o.mergeOption(r, n, !0);
                    else {
                        a && e.defaultEmphasis(r.label, [re, "show", he, Y, "formatter"]);
                        var s = {
                            seriesIndex: t[Te],
                            name: t.name,
                            createdBySelf: !0
                        };
                        o = new i(r,this,n,s)
                    }
                    t.markLineModel = o
                }, this)
            },
            defaultOption: {
                zlevel: 0,
                z: 5,
                symbol: ["circle", "arrow"],
                symbolSize: [8, 16],
                precision: 2,
                tooltip: {
                    trigger: "item"
                },
                label: {
                    normal: {
                        show: !0,
                        position: "end"
                    },
                    emphasis: {
                        show: !0
                    }
                },
                lineStyle: {
                    normal: {
                        type: "dashed"
                    },
                    emphasis: {
                        width: 3
                    }
                },
                animationEasing: "linear"
            }
        });
        return i
    }),
    e("echarts/component/marker/MarkLineView", [li, si, "../../data/List", "../../util/format", "../../util/model", r, "./markerHelper", "../../chart/helper/LineDraw", m], function(t) {
        function e(t, e) {
            return y.dataFilter(t, e[0]) && y.dataFilter(t, e[1])
        }
        function i(t, i, r) {
            var o = new a(i.getCoordDimensionInfo(),r)
              , s = new a(i.getCoordDimensionInfo(),r)
              , l = new a([],r);
            if (t) {
                var u = n[ri](n.map(r.get("data"), n.curry(_, i, t, r)), n.curry(e, t));
                o.initData(n.map(u, function(t) {
                    return t[0]
                }), null, y.dimValueGetter),
                s.initData(n.map(u, function(t) {
                    return t[1]
                }), null, y.dimValueGetter),
                l.initData(n.map(u, function(t) {
                    return t[2]
                }))
            }
            return {
                from: o,
                to: s,
                line: l
            }
        }
        var n = t(si)
          , a = t("../../data/List")
          , o = t("../../util/format")
          , s = t("../../util/model")
          , h = t(r)
          , d = o.addCommas
          , v = o.encodeHTML
          , y = t("./markerHelper")
          , x = t("../../chart/helper/LineDraw")
          , _ = function(t, e, i, r) {
            var a = t[Pe]()
              , o = r.type;
            if (!n[be](r) && ("min" === o || "max" === o || "average" === o)) {
                var s = y.getAxisInfo(r, a, e, t)
                  , l = s.baseAxis.dim + "Axis"
                  , u = s.valueAxis.dim + "Axis"
                  , c = s.baseAxis.scale[$]()
                  , h = n.clone(r)
                  , d = {};
                h.type = null,
                h[l] = c[0],
                d[l] = c[1];
                var p = y.numCalculate(a, s.valueDataDim, o);
                p = s.valueAxis.coordToData(s.valueAxis[f](p));
                var m = i.get("precision");
                m >= 0 && (p = +p[w](m)),
                h[u] = d[u] = p,
                r = [h, d, {
                    type: o,
                    value: p
                }]
            }
            return r = [y.dataTransform(t, r[0]), y.dataTransform(t, r[1]), n[Ze]({}, r[2])],
            n.merge(r[2], r[0]),
            n.merge(r[2], r[1]),
            r
        }
          , b = {
            formatTooltip: function(t) {
                var e = this._data
                  , i = this[X](t)
                  , r = n[be](i) ? n.map(i, d).join(", ") : d(i)
                  , a = e[j](t);
                return this.name + "<br />" + ((a ? v(a) + " : " : "") + r)
            },
            getRawDataArray: function() {
                return this[Ke].data
            },
            getData: function() {
                return this._data
            },
            setData: function(t) {
                this._data = t
            }
        };
        n[Be](b, s.dataFormatMixin),
        t(m)[ye]({
            type: "markLine",
            init: function() {
                this._markLineMap = {}
            },
            render: function(t, e, i) {
                var n = this._markLineMap;
                for (var r in n)
                    n[r].__keep = !1;
                e[Oe](function(t) {
                    var n = t.markLineModel;
                    n && this._renderSeriesML(t, n, e, i)
                }, this);
                for (var r in n)
                    n[r].__keep || this.group[Ne](n[r].group)
            },
            _renderSeriesML: function(t, e, r, a) {
                function o(e, i, n) {
                    var r, o = e[T](i), c = o.get("x"), d = o.get("y");
                    if (null != c && null != d)
                        r = [h[S](c, a[$e]()), h[S](d, a[Ye]())];
                    else if (t.getMarkerPosition)
                        r = t.getMarkerPosition(e.getValues(e[U], i));
                    else {
                        var p = e.get(_[0], i)
                          , m = e.get(_[1], i);
                        r = s[g]([p, m])
                    }
                    e.setItemLayout(i, r),
                    e[A](i, {
                        symbolSize: o.get(l) || L[n ? 0 : 1],
                        symbol: o.get(u, !0) || z[n ? 0 : 1],
                        color: o.get("itemStyle.normal.color") || f.getVisual("color")
                    })
                }
                var s = t[de]
                  , d = t.name
                  , f = t[Pe]()
                  , m = this._markLineMap
                  , v = m[d];
                v || (v = m[d] = new x),
                this.group.add(v.group);
                var y = i(s, t, e)
                  , _ = s[U]
                  , w = y.from
                  , M = y.to
                  , C = y.line;
                n[Ze](e, b),
                e.setData(C);
                var z = e.get(u)
                  , L = e.get(l);
                n[be](z) || (z = [z, z]),
                typeof L === ge && (L = [L, L]),
                y.from.each(function(t) {
                    o(w, t, !0),
                    o(M, t)
                }),
                C.each(function(t) {
                    var e = C[T](t).get("lineStyle.normal.color");
                    C[A](t, {
                        color: e || w[p](t, "color")
                    }),
                    C.setItemLayout(t, [w.getItemLayout(t), M.getItemLayout(t)])
                }),
                v[c](C, w, M),
                y.line[I](function(t) {
                    t[Me](function(t) {
                        t[Ae] = e
                    })
                }),
                v.__keep = !0
            }
        })
    }),
    e("echarts/component/tooltip/TooltipView", [li, "./TooltipContent", v, si, "../../util/format", r, m], function(t) {
        function e(t, e) {
            if (!t || !e)
                return !1;
            var i = C.round;
            return i(t[0]) === i(e[0]) && i(t[1]) === i(e[1])
        }
        function i(t, e, i, n) {
            return {
                x1: t,
                y1: e,
                x2: i,
                y2: n
            }
        }
        function o(t, e, i, n) {
            return {
                x: t,
                y: e,
                width: i,
                height: n
            }
        }
        function l(t, e, i, n, r, a) {
            return {
                cx: t,
                cy: e,
                r0: i,
                r: n,
                startAngle: r,
                endAngle: a,
                clockwise: !0
            }
        }
        function u(t, e, i, n, r) {
            var a = i.clientWidth
              , o = i.clientHeight
              , s = 20;
            return t + a + s > n ? t -= a + s : t += s,
            e + o + s > r ? e -= o + s : e += s,
            [t, e]
        }
        function c(t, e, i) {
            var n = i.clientWidth
              , r = i.clientHeight
              , a = 5
              , o = 0
              , s = 0
              , l = e.width
              , u = e[He];
            switch (t) {
            case "inside":
                o = e.x + l / 2 - n / 2,
                s = e.y + u / 2 - r / 2;
                break;
            case "top":
                o = e.x + l / 2 - n / 2,
                s = e.y - r - a;
                break;
            case We:
                o = e.x + l / 2 - n / 2,
                s = e.y + u + a;
                break;
            case "left":
                o = e.x - n - a,
                s = e.y + u / 2 - r / 2;
                break;
            case "right":
                o = e.x + l + a,
                s = e.y + u / 2 - r / 2
            }
            return [o, s]
        }
        function h(t, e, i, n, r, a, o) {
            var s = o[$e]()
              , l = o[Ye]()
              , h = a && a[se]().clone();
            if (a && h[F](a[ai]),
            typeof t === xe && (t = t([e, i], r, h)),
            b[be](t))
                e = A(t[0], s),
                i = A(t[1], l);
            else if (typeof t === ei && a) {
                var d = c(t, h, n.el);
                e = d[0],
                i = d[1]
            } else {
                var d = u(e, i, n.el, s, l);
                e = d[0],
                i = d[1]
            }
            n.moveTo(e, i)
        }
        function f(t) {
            var e = t[de]
              , i = t.get("tooltip.trigger", !0);
            return !(!e || "cartesian2d" !== e.type && "polar" !== e.type && "single" !== e.type || "item" === i)
        }
        var p = t("./TooltipContent")
          , y = t(v)
          , b = t(si)
          , M = t("../../util/format")
          , C = t(r)
          , A = C[S];
        t(m)[ye]({
            type: "tooltip",
            _axisPointers: {},
            init: function(t, e) {
                var i = new p(e.getDom(),e);
                this._tooltipContent = i,
                e.on("showTip", this._manuallyShowTip, this),
                e.on("hideTip", this._manuallyHideTip, this)
            },
            render: function(t, e, i) {
                this.group[pe](),
                this._axisPointers = {},
                this._tooltipModel = t,
                this._ecModel = e,
                this._api = i,
                this._lastHover = {};
                var r = this._tooltipContent;
                r[Fe](),
                r.enterable = t.get("enterable"),
                this._alwaysShowContent = t.get("alwaysShowContent"),
                this._seriesGroupByAxis = this._prepareAxisTriggerData(t, e);
                var a = this._crossText;
                a && this.group.add(a);
                var o = this._api.getZr()
                  , s = this._tryShow;
                o.off("click", s),
                o.off(n, s),
                o.off(Le, this._hide),
                "click" === t.get("triggerOn") ? o.on("click", s, this) : (o.on(n, s, this),
                o.on(Le, this._hide, this))
            },
            _manuallyShowTip: function(t) {
                if (t.from !== this.uid) {
                    var e = this._ecModel
                      , i = t[Te]
                      , r = t.dataIndex
                      , a = e.getSeriesByIndex(i)
                      , o = this._api;
                    if (null == t.x || null == t.y) {
                        if (a || e[Oe](function(t) {
                            f(t) && !a && (a = t)
                        }),
                        a) {
                            var s = a[Pe]();
                            null == r && (r = s.indexOfName(t.name));
                            var l, u, c = s[O](r), h = a[de];
                            if (h && h[g]) {
                                var d = h[g](s.getValues(h[U], r, !0));
                                l = d && d[0],
                                u = d && d[1]
                            } else if (c) {
                                var p = c[se]().clone();
                                p[F](c[ai]),
                                l = p.x + p.width / 2,
                                u = p.y + p[He] / 2
                            }
                            null != l && null != u && this._tryShow({
                                offsetX: l,
                                offsetY: u,
                                target: c,
                                event: {}
                            })
                        }
                    } else
                        o.getZr().handler.dispatch(n, {
                            zrX: t.x,
                            zrY: t.y
                        })
                }
            },
            _manuallyHideTip: function(t) {
                t.from !== this.uid && this._hide()
            },
            _prepareAxisTriggerData: function(t, e) {
                var i = {};
                return e[Oe](function(t) {
                    if (f(t)) {
                        var e, n, r = t[de];
                        "cartesian2d" === r.type ? (e = r.getBaseAxis(),
                        n = e.dim + e.index) : "single" === r.type ? (e = r[_](),
                        n = e.dim + e.type) : (e = r.getBaseAxis(),
                        n = e.dim + r.name),
                        i[n] = i[n] || {
                            coordSys: [],
                            series: []
                        },
                        i[n].coordSys.push(r),
                        i[n][Ie].push(t)
                    }
                }, this),
                i
            },
            _tryShow: function(t) {
                var e = t[ze]
                  , i = this._tooltipModel
                  , n = i.get(Re)
                  , r = this._ecModel
                  , a = this._api;
                if (i)
                    if (e && null != e.dataIndex) {
                        var o = e[Ae] || r.getSeriesByIndex(e[Te])
                          , s = e.dataIndex
                          , l = o[Pe]()[T](s);
                        "axis" === (l.get("tooltip.trigger") || n) ? this._showAxisTooltip(i, r, t) : (this._ticket = "",
                        this._hideAxisPointer(),
                        this._resetLastHover(),
                        this._showItemTooltipContent(o, s, t)),
                        a[Ee]({
                            type: "showTip",
                            from: this.uid,
                            dataIndex: e.dataIndex,
                            seriesIndex: e[Te]
                        })
                    } else
                        "item" === n ? this._hide() : this._showAxisTooltip(i, r, t),
                        "cross" === i.get("axisPointer.type") && a[Ee]({
                            type: "showTip",
                            from: this.uid,
                            x: t.offsetX,
                            y: t.offsetY
                        })
            },
            _showAxisTooltip: function(t, i, n) {
                var r = t[Qe]("axisPointer")
                  , a = r.get("type");
                if ("cross" === a) {
                    var o = n[ze];
                    if (o && null != o.dataIndex) {
                        var s = i.getSeriesByIndex(o[Te])
                          , l = o.dataIndex;
                        this._showItemTooltipContent(s, l, n)
                    }
                }
                this._showAxisPointer();
                var u = !0;
                b.each(this._seriesGroupByAxis, function(t) {
                    var i = t.coordSys
                      , o = i[0]
                      , s = [n.offsetX, n.offsetY];
                    if (!o.containPoint(s))
                        return void this._hideAxisPointer(o.name);
                    u = !1;
                    var l = o[U]
                      , c = o.pointToData(s, !0);
                    s = o[g](c);
                    var h = o.getBaseAxis()
                      , d = r.get("axis");
                    "auto" === d && (d = h.dim);
                    var f = !1
                      , p = this._lastHover;
                    if ("cross" === a)
                        e(p.data, c) && (f = !0),
                        p.data = c;
                    else {
                        var m = b[_e](l, d);
                        p.data === c[m] && (f = !0),
                        p.data = c[m]
                    }
                    "cartesian2d" !== o.type || f ? "polar" !== o.type || f ? "single" !== o.type || f || this._showSinglePointer(r, o, d, s) : this._showPolarPointer(r, o, d, s) : this._showCartesianPointer(r, o, d, s),
                    "cross" !== a && this._dispatchAndShowSeriesTooltipContent(o, t[Ie], s, c, f)
                }, this),
                u && this._hide()
            },
            _showCartesianPointer: function(t, e, n, r) {
                function a(n, r, a) {
                    var o = "x" === n ? i(r[0], a[0], r[0], a[1]) : i(a[0], r[1], a[1], r[1])
                      , s = l._getPointerElement(e, t, n, o);
                    c ? y.updateProps(s, {
                        shape: o
                    }, t) : s.attr({
                        shape: o
                    })
                }
                function s(i, n, r) {
                    var a = e[_](i)
                      , s = a.getBandWidth()
                      , u = r[1] - r[0]
                      , h = "x" === i ? o(n[0] - s / 2, r[0], s, u) : o(r[0], n[1] - s / 2, u, s)
                      , d = l._getPointerElement(e, t, i, h);
                    c ? y.updateProps(d, {
                        shape: h
                    }, t) : d.attr({
                        shape: h
                    })
                }
                var l = this
                  , u = t.get("type")
                  , c = "cross" !== u;
                if ("cross" === u)
                    a("x", r, e[_]("y").getGlobalExtent()),
                    a("y", r, e[_]("x").getGlobalExtent()),
                    this._updateCrossText(e, r, t);
                else {
                    var h = e[_]("x" === n ? "y" : "x")
                      , d = h.getGlobalExtent();
                    "cartesian2d" === e.type && ("line" === u ? a : s)(n, r, d)
                }
            },
            _showSinglePointer: function(t, e, n, r) {
                function o(n, r, o) {
                    var u = e[_]()
                      , h = u[a]
                      , d = h === s ? i(r[0], o[0], r[0], o[1]) : i(o[0], r[1], o[1], r[1])
                      , f = l._getPointerElement(e, t, n, d);
                    c ? y.updateProps(f, {
                        shape: d
                    }, t) : f.attr({
                        shape: d
                    })
                }
                var l = this
                  , u = t.get("type")
                  , c = "cross" !== u
                  , h = e[fe]()
                  , d = [h.y, h.y + h[He]];
                o(n, r, d)
            },
            _showPolarPointer: function(t, e, n, r) {
                function a(n, r, a) {
                    var o, l = e.pointToCoord(r);
                    if ("angle" === n) {
                        var u = e.coordToPoint([a[0], l[1]])
                          , c = e.coordToPoint([a[1], l[1]]);
                        o = i(u[0], u[1], c[0], c[1])
                    } else
                        o = {
                            cx: e.cx,
                            cy: e.cy,
                            r: l[0]
                        };
                    var h = s._getPointerElement(e, t, n, o);
                    f ? y.updateProps(h, {
                        shape: o
                    }, t) : h.attr({
                        shape: o
                    })
                }
                function o(i, n, r) {
                    var a, o = e[_](i), u = o.getBandWidth(), c = e.pointToCoord(n), h = Math.PI / 180;
                    a = "angle" === i ? l(e.cx, e.cy, r[0], r[1], (-c[1] - u / 2) * h, (-c[1] + u / 2) * h) : l(e.cx, e.cy, c[0] - u / 2, c[0] + u / 2, 0, 2 * Math.PI);
                    var d = s._getPointerElement(e, t, i, a);
                    f ? y.updateProps(d, {
                        shape: a
                    }, t) : d.attr({
                        shape: a
                    })
                }
                var s = this
                  , u = t.get("type")
                  , c = e.getAngleAxis()
                  , h = e.getRadiusAxis()
                  , f = "cross" !== u;
                if ("cross" === u)
                    a("angle", r, h[$]()),
                    a(d, r, c[$]()),
                    this._updateCrossText(e, r, t);
                else {
                    var p = e[_](n === d ? "angle" : d)
                      , m = p[$]();
                    ("line" === u ? a : o)(n, r, m)
                }
            },
            _updateCrossText: function(t, e, i) {
                var n = i[Qe]("crossStyle")
                  , r = n[Qe](he)
                  , a = this._tooltipModel
                  , o = this._crossText;
                o || (o = this._crossText = new y.Text({
                    style: {
                        textAlign: "left",
                        textBaseline: "bottom"
                    }
                }),
                this.group.add(o));
                var s = t.pointToData(e)
                  , l = t[U];
                s = b.map(s, function(e, i) {
                    var n = t[_](l[i]);
                    return e = n.type === x || "time" === n.type ? n.scale[K](e) : M.addCommas(e[w](n.getPixelPrecision()))
                }),
                o[ne]({
                    fill: r[le]() || n.get("color"),
                    textFont: r[ue](),
                    text: s.join(", "),
                    x: e[0] + 5,
                    y: e[1] - 5
                }),
                o.z = a.get("z"),
                o[Se] = a.get(Se)
            },
            _getPointerElement: function(t, e, i, n) {
                var r = this._tooltipModel
                  , a = r.get("z")
                  , o = r.get(Se)
                  , s = this._axisPointers
                  , l = t.name;
                if (s[l] = s[l] || {},
                s[l][i])
                    return s[l][i];
                var u = e.get("type")
                  , c = e[Qe](u + "Style")
                  , h = "shadow" === u
                  , f = c[h ? "getAreaStyle" : "getLineStyle"]()
                  , p = "polar" === t.type ? h ? "Sector" : i === d ? "Circle" : "Line" : h ? "Rect" : "Line";
                h ? f[N] = null : f.fill = null;
                var m = s[l][i] = new y[p]({
                    style: f,
                    z: a,
                    zlevel: o,
                    silent: !0,
                    shape: n
                });
                return this.group.add(m),
                m
            },
            _dispatchAndShowSeriesTooltipContent: function(t, e, i, n, r) {
                var a = this._tooltipModel
                  , o = this._tooltipContent
                  , s = t.getBaseAxis()
                  , l = b.map(e, function(t) {
                    return {
                        seriesIndex: t[Te],
                        dataIndex: t.getAxisTooltipDataIndex ? t.getAxisTooltipDataIndex(t.getDimensionsOnAxis(s.dim), n, s) : t[Pe]().indexOfNearest(t.getDimensionsOnAxis(s.dim), n["x" === s.dim || s.dim === d ? 0 : 1])
                    }
                })
                  , u = this._lastHover
                  , c = this._api;
                if (u.payloadBatch && !r && c[Ee]({
                    type: "downplay",
                    batch: u.payloadBatch
                }),
                r || (c[Ee]({
                    type: "highlight",
                    batch: l
                }),
                u.payloadBatch = l),
                c[Ee]({
                    type: "showTip",
                    dataIndex: l[0].dataIndex,
                    seriesIndex: l[0][Te],
                    from: this.uid
                }),
                s && a.get("showContent")) {
                    var f, p = a.get("formatter"), m = a.get(re), v = b.map(e, function(t, e) {
                        return t[Ce](l[e].dataIndex)
                    });
                    o.show(a);
                    var g = l[0].dataIndex;
                    if (!r) {
                        if (this._ticket = "",
                        p) {
                            if (typeof p === ei)
                                f = M.formatTpl(p, v);
                            else if (typeof p === xe) {
                                var y = this
                                  , x = "axis_" + t.name + "_" + g
                                  , _ = function(t, e) {
                                    t === y._ticket && (o.setContent(e),
                                    h(m, i[0], i[1], o, v, null, c))
                                };
                                y._ticket = x,
                                f = p(v, x, _)
                            }
                        } else {
                            var w = e[0][Pe]()[j](g);
                            f = (w ? w + "<br />" : "") + b.map(e, function(t, e) {
                                return t.formatTooltip(l[e].dataIndex, !0)
                            }).join("<br />")
                        }
                        o.setContent(f)
                    }
                    h(m, i[0], i[1], o, v, null, c)
                }
            },
            _showItemTooltipContent: function(t, e, i) {
                var n = this._api
                  , r = t[Pe]()
                  , a = r[T](e)
                  , o = this._tooltipModel
                  , s = this._tooltipContent
                  , l = a[Qe]("tooltip");
                if (l.parentModel ? l.parentModel.parentModel = o : l.parentModel = this._tooltipModel,
                l.get("showContent")) {
                    var u, c = l.get("formatter"), d = l.get(re), f = t[Ce](e);
                    if (c) {
                        if (typeof c === ei)
                            u = M.formatTpl(c, f);
                        else if (typeof c === xe) {
                            var p = this
                              , m = "item_" + t.name + "_" + e
                              , v = function(t, e) {
                                t === p._ticket && (s.setContent(e),
                                h(d, i.offsetX, i.offsetY, s, f, i[ze], n))
                            };
                            p._ticket = m,
                            u = c(f, m, v)
                        }
                    } else
                        u = t.formatTooltip(e);
                    s.show(l),
                    s.setContent(u),
                    h(d, i.offsetX, i.offsetY, s, f, i[ze], n)
                }
            },
            _showAxisPointer: function(t) {
                if (t) {
                    var e = this._axisPointers[t];
                    e && b.each(e, function(t) {
                        t.show()
                    })
                } else
                    this.group.eachChild(function(t) {
                        t.show()
                    }),
                    this.group.show()
            },
            _resetLastHover: function() {
                var t = this._lastHover;
                t.payloadBatch && this._api[Ee]({
                    type: "downplay",
                    batch: t.payloadBatch
                }),
                this._lastHover = {}
            },
            _hideAxisPointer: function(t) {
                if (t) {
                    var e = this._axisPointers[t];
                    e && b.each(e, function(t) {
                        t.hide()
                    })
                } else
                    this.group.hide()
            },
            _hide: function() {
                this._hideAxisPointer(),
                this._resetLastHover(),
                this._alwaysShowContent || this._tooltipContent.hideLater(this._tooltipModel.get("hideDelay")),
                this._api[Ee]({
                    type: "hideTip",
                    from: this.uid
                })
            },
            dispose: function(t, e) {
                var i = e.getZr();
                this._tooltipContent.hide(),
                i.off("click", this._tryShow),
                i.off(n, this._tryShow),
                i.off(Le, this._hide),
                e.off("showTip", this._manuallyShowTip),
                e.off("hideTip", this._manuallyHideTip)
            }
        })
    }),
    e("echarts/component/tooltip/TooltipModel", [li, m], function(t) {
        t(m).extendComponentModel({
            type: "tooltip",
            defaultOption: {
                zlevel: 0,
                z: 8,
                show: !0,
                showContent: !0,
                trigger: "item",
                triggerOn: "mousemove",
                alwaysShowContent: !1,
                hideDelay: 100,
                transitionDuration: .4,
                enterable: !1,
                backgroundColor: "rgba(50,50,50,0.7)",
                borderColor: "#333",
                borderRadius: 4,
                borderWidth: 0,
                padding: 5,
                axisPointer: {
                    type: "line",
                    axis: "auto",
                    animation: !0,
                    animationDurationUpdate: 200,
                    animationEasingUpdate: "exponentialOut",
                    lineStyle: {
                        color: "#555",
                        width: 1,
                        type: "solid"
                    },
                    crossStyle: {
                        color: "#555",
                        width: 1,
                        type: "dashed",
                        textStyle: {}
                    },
                    shadowStyle: {
                        color: "rgba(150,150,150,0.3)"
                    }
                },
                textStyle: {
                    color: "#fff",
                    fontSize: 14
                }
            }
        })
    }),
    e("echarts/component/marker/MarkPointModel", [li, "../../util/model", m], function(t) {
        var e = t("../../util/model")
          , i = t(m).extendComponentModel({
            type: "markPoint",
            dependencies: [Ie, "grid", "polar"],
            init: function(t, e, i, n) {
                this.mergeDefaultAndTheme(t, i),
                this.mergeOption(t, i, n.createdBySelf, !0)
            },
            mergeOption: function(t, n, r, a) {
                r || n[Oe](function(t) {
                    var r = t.get("markPoint")
                      , o = t.markPointModel;
                    if (!r || !r.data)
                        return void (t.markPointModel = null);
                    if (o)
                        o.mergeOption(r, n, !0);
                    else {
                        a && e.defaultEmphasis(r.label, [re, "show", he, Y, "formatter"]);
                        var s = {
                            seriesIndex: t[Te],
                            name: t.name,
                            createdBySelf: !0
                        };
                        o = new i(r,this,n,s)
                    }
                    t.markPointModel = o
                }, this)
            },
            defaultOption: {
                zlevel: 0,
                z: 5,
                symbol: "pin",
                symbolSize: 50,
                tooltip: {
                    trigger: "item"
                },
                label: {
                    normal: {
                        show: !0,
                        position: "inside"
                    },
                    emphasis: {
                        show: !0
                    }
                },
                itemStyle: {
                    normal: {
                        borderWidth: 2
                    },
                    emphasis: {}
                }
            }
        });
        return i
    }),
    e("echarts/component/marker/MarkPointView", [li, "../../chart/helper/SymbolDraw", si, "../../util/format", "../../util/model", r, "../../data/List", "./markerHelper", m], function(t) {
        function e(t, e, i) {
            var r = e[Pe]()
              , a = (r[U],
            new f(e.getCoordDimensionInfo(),i));
            return t && a.initData(n[ri](n.map(i.get("data"), n.curry(p.dataTransform, e)), n.curry(p.dataFilter, t)), null, p.dimValueGetter),
            a
        }
        var i = t("../../chart/helper/SymbolDraw")
          , n = t(si)
          , a = t("../../util/format")
          , o = t("../../util/model")
          , s = t(r)
          , h = a.addCommas
          , d = a.encodeHTML
          , f = t("../../data/List")
          , p = t("./markerHelper")
          , v = {
            getRawDataArray: function() {
                return this[Ke].data
            },
            formatTooltip: function(t) {
                var e = this[Pe]()
                  , i = this[X](t)
                  , r = n[be](i) ? n.map(i, h).join(", ") : h(i)
                  , a = e[j](t);
                return this.name + "<br />" + ((a ? d(a) + " : " : "") + r)
            },
            getData: function() {
                return this._data
            },
            setData: function(t) {
                this._data = t
            }
        };
        n[Be](v, o.dataFormatMixin),
        t(m)[ye]({
            type: "markPoint",
            init: function() {
                this._symbolDrawMap = {}
            },
            render: function(t, e, i) {
                var n = this._symbolDrawMap;
                for (var r in n)
                    n[r].__keep = !1;
                e[Oe](function(t) {
                    var e = t.markPointModel;
                    e && this._renderSeriesMP(t, e, i)
                }, this);
                for (var r in n)
                    n[r].__keep || (n[r][Ne](),
                    this.group[Ne](n[r].group))
            },
            _renderSeriesMP: function(t, r, a) {
                var o = t[de]
                  , h = t.name
                  , d = t[Pe]()
                  , f = this._symbolDrawMap
                  , p = f[h];
                p || (p = f[h] = new i);
                var m = e(o, t, r)
                  , y = o && o[U];
                n.mixin(r, v),
                r.setData(m),
                m.each(function(e) {
                    var i, n = m[T](e), c = n[V]("x"), h = n[V]("y");
                    if (null != c && null != h)
                        i = [s[S](c, a[$e]()), s[S](h, a[Ye]())];
                    else if (t.getMarkerPosition)
                        i = t.getMarkerPosition(m.getValues(m[U], e));
                    else if (o) {
                        var f = m.get(y[0], e)
                          , p = m.get(y[1], e);
                        i = o[g]([f, p])
                    }
                    m.setItemLayout(e, i);
                    var v = n[V](l);
                    typeof v === xe && (v = v(r[X](e), r[Ce](e))),
                    m[A](e, {
                        symbolSize: v,
                        color: n.get("itemStyle.normal.color") || d.getVisual("color"),
                        symbol: n[V](u)
                    })
                }),
                p[c](m),
                this.group.add(p.group),
                m[I](function(t) {
                    t[Me](function(t) {
                        t[Ae] = r
                    })
                }),
                p.__keep = !0
            }
        })
    }),
    e("echarts/component/visualMapContinuous", [li, "../echarts", "./visualMap/preprocessor", "./visualMap/typeDefaulter", "./visualMap/visualCoding", "./visualMap/ContinuousModel", "./visualMap/ContinuousView", "./visualMap/visualMapAction"], function(t) {
        t("../echarts").registerPreprocessor(t("./visualMap/preprocessor")),
        t("./visualMap/typeDefaulter"),
        t("./visualMap/visualCoding"),
        t("./visualMap/ContinuousModel"),
        t("./visualMap/ContinuousView"),
        t("./visualMap/visualMapAction")
    }),
    e("echarts/component/visualMapPiecewise", [li, "../echarts", "./visualMap/preprocessor", "./visualMap/typeDefaulter", "./visualMap/visualCoding", "./visualMap/PiecewiseModel", "./visualMap/PiecewiseView", "./visualMap/visualMapAction"], function(t) {
        t("../echarts").registerPreprocessor(t("./visualMap/preprocessor")),
        t("./visualMap/typeDefaulter"),
        t("./visualMap/visualCoding"),
        t("./visualMap/PiecewiseModel"),
        t("./visualMap/PiecewiseView"),
        t("./visualMap/visualMapAction")
    }),
    e("echarts/component/dataZoom/typeDefaulter", [li, "../../model/Component"], function(t) {
        t("../../model/Component").registerSubTypeDefaulter("dataZoom", function() {
            return "slider"
        })
    }),
    e("echarts/component/dataZoom/DataZoomModel", [li, si, "zrender/core/env", m, "../../util/model", "./AxisProxy"], function(t) {
        function e(t) {
            var e = {};
            return c(["start", "end", "startValue", "endValue"], function(i) {
                e[i] = t[i]
            }),
            e
        }
        function i(t, e, i, n) {
            null != i[e] && null == i[t] && (n[t] = null)
        }
        var n = t(si)
          , r = t("zrender/core/env")
          , o = t(m)
          , l = t("../../util/model")
          , u = t("./AxisProxy")
          , c = n.each
          , h = l.eachAxisDim;
        return o.extendComponentModel({
            type: "dataZoom",
            dependencies: ["xAxis", "yAxis", "zAxis", "radiusAxis", "angleAxis", Ie],
            defaultOption: {
                zlevel: 0,
                z: 4,
                orient: null,
                xAxisIndex: null,
                yAxisIndex: null,
                angleAxisIndex: null,
                radiusAxisIndex: null,
                filterMode: "filter",
                throttle: 100,
                start: 0,
                end: 100,
                startValue: null,
                endValue: null
            },
            init: function(t, i, n) {
                this._dataIntervalByAxis = {},
                this._dataInfo = {},
                this._axisProxies = {},
                this.textStyleModel;
                var r = e(t);
                this.mergeDefaultAndTheme(t, n),
                this.doInit(r)
            },
            mergeOption: function(t) {
                var i = e(t);
                n.merge(this[Ke], t, !0),
                this.doInit(i)
            },
            doInit: function(t) {
                var e = this[Ke];
                r[Ue] || (e.realtime = !1),
                i("start", "startValue", t, e),
                i("end", "endValue", t, e),
                this.textStyleModel = this[Qe](he),
                this._resetTarget(),
                this._giveAxisProxies(),
                this._backup()
            },
            _giveAxisProxies: function() {
                var t = this._axisProxies;
                this.eachTargetAxis(function(e, i, n, r) {
                    var a = this.dependentModels[e.axis][i]
                      , o = a.__dzAxisProxy || (a.__dzAxisProxy = new u(e.name,i,this,r));
                    t[e.name + "_" + i] = o
                }, this)
            },
            _resetTarget: function() {
                var t = this[Ke]
                  , e = this._judgeAutoMode();
                h(function(e) {
                    var i = e.axisIndex;
                    t[i] = l.normalizeToArray(t[i])
                }, this),
                "axisIndex" === e ? this._autoSetAxisIndex() : e === a && this._autoSetOrient()
            },
            _judgeAutoMode: function() {
                var t = this[Ke]
                  , e = !1;
                h(function(i) {
                    null != t[i.axisIndex] && (e = !0)
                }, this);
                var i = t[a];
                return null == i && e ? a : e ? void 0 : (null == i && (t[a] = s),
                "axisIndex")
            },
            _autoSetAxisIndex: function() {
                var t = !0
                  , e = this.get(a, !0)
                  , i = this[Ke];
                if (t) {
                    var r = "vertical" === e ? {
                        dim: "y",
                        axisIndex: "yAxisIndex",
                        axis: "yAxis"
                    } : {
                        dim: "x",
                        axisIndex: "xAxisIndex",
                        axis: "xAxis"
                    };
                    this.dependentModels[r.axis][Ve] && (i[r.axisIndex] = [0],
                    t = !1)
                }
                t && h(function(e) {
                    if (t) {
                        var n = []
                          , r = this.dependentModels[e.axis];
                        if (r[Ve] && !n[Ve])
                            for (var a = 0, o = r[Ve]; o > a; a++)
                                r[a].get("type") === x && n.push(a);
                        i[e.axisIndex] = n,
                        n[Ve] && (t = !1)
                    }
                }, this),
                t && this[q][Oe](function(t) {
                    this._isSeriesHasAllAxesTypeOf(t, "value") && h(function(e) {
                        var r = i[e.axisIndex]
                          , a = t.get(e.axisIndex);
                        n[_e](r, a) < 0 && r.push(a)
                    })
                }, this)
            },
            _autoSetOrient: function() {
                var t;
                this.eachTargetAxis(function(e) {
                    !t && (t = e.name)
                }, this),
                this[Ke][a] = "y" === t ? "vertical" : s
            },
            _isSeriesHasAllAxesTypeOf: function(t, e) {
                var i = !0;
                return h(function(n) {
                    var r = t.get(n.axisIndex)
                      , a = this.dependentModels[n.axis][r];
                    a && a.get("type") === e || (i = !1)
                }, this),
                i
            },
            _backup: function() {
                this.eachTargetAxis(function(t, e, i, n) {
                    var r = n[W](t.axis, e);
                    this.getAxisProxy(t.name, e).backup(this, {
                        scale: r.get("scale", !0),
                        min: r.get("min", !0),
                        max: r.get("max", !0)
                    })
                }, this)
            },
            getFirstTargetAxisModel: function() {
                var t;
                return h(function(e) {
                    if (null == t) {
                        var i = this.get(e.axisIndex);
                        i[Ve] && (t = this.dependentModels[e.axis][i[0]])
                    }
                }, this),
                t
            },
            eachTargetAxis: function(t, e) {
                var i = this[q];
                h(function(n) {
                    c(this.get(n.axisIndex), function(r) {
                        t.call(e, n, r, this, i)
                    }, this)
                }, this)
            },
            getAxisProxy: function(t, e) {
                return this._axisProxies[t + "_" + e]
            },
            setRawRange: function(t) {
                c(["start", "end", "startValue", "endValue"], function(e) {
                    this[Ke][e] = t[e]
                }, this)
            },
            getPercentRange: function() {
                var t = this.findRepresentativeAxisProxy();
                return t ? t.getDataPercentWindow() : void 0
            },
            getValueRange: function(t, e) {
                if (null != t || null != e)
                    return this.getAxisProxy(t, e).getDataValueWindow();
                var i = this.findRepresentativeAxisProxy();
                return i ? i.getDataValueWindow() : void 0
            },
            findRepresentativeAxisProxy: function() {
                var t = this._axisProxies;
                for (var e in t)
                    if (t.hasOwnProperty(e) && t[e].hostedBy(this))
                        return t[e];
                for (var e in t)
                    if (t.hasOwnProperty(e) && !t[e].hostedBy(this))
                        return t[e]
            }
        })
    }),
    e("echarts/component/dataZoom/DataZoomView", [li, "../../view/Component"], function(t) {
        var e = t("../../view/Component");
        return e[Ze]({
            type: "dataZoom",
            render: function(t, e, i) {
                this.dataZoomModel = t,
                this[q] = e,
                this.api = i
            },
            getTargetInfo: function() {
                function t(t, e, i, n) {
                    for (var r, a = 0; a < i[Ve]; a++)
                        if (i[a].model === t) {
                            r = i[a];
                            break
                        }
                    r || i.push(r = {
                        model: t,
                        axisModels: [],
                        coordIndex: n
                    }),
                    r.axisModels.push(e)
                }
                var e = this.dataZoomModel
                  , i = this[q]
                  , n = []
                  , r = []
                  , a = [];
                return e.eachTargetAxis(function(e, o) {
                    var s = i[W](e.axis, o);
                    if (s) {
                        a.push(s);
                        var l = s.get("gridIndex")
                          , u = s.get("polarIndex");
                        if (null != l) {
                            var c = i[W]("grid", l);
                            t(c, s, n, l)
                        } else if (null != u) {
                            var c = i[W]("polar", u);
                            t(c, s, r, u)
                        }
                    }
                }, this),
                {
                    cartesians: n,
                    polars: r,
                    axisModels: a
                }
            }
        })
    }),
    e("echarts/component/dataZoom/SliderZoomModel", [li, "./DataZoomModel", "../../util/layout"], function(t) {
        var e = t("./DataZoomModel")
          , i = t("../../util/layout");
        return e[Ze]({
            type: "dataZoom.slider",
            inputPositionParams: null,
            defaultOption: {
                show: !0,
                left: "auto",
                right: "auto",
                top: "auto",
                bottom: "auto",
                width: "auto",
                height: "auto",
                backgroundColor: "rgba(47,69,84,0)",
                dataBackgroundColor: "#ddd",
                fillerColor: "rgba(47,69,84,0.25)",
                handleColor: "rgba(47,69,84,0.65)",
                handleSize: 10,
                labelPrecision: null,
                labelFormatter: null,
                showDetail: !0,
                showDataShadow: "auto",
                realtime: !0,
                zoomLock: !1,
                textStyle: {
                    color: "#333"
                }
            },
            init: function(t) {
                this.inputPositionParams = i.getLayoutParams(t),
                this.$superApply("init", arguments)
            },
            mergeOption: function(t) {
                this.inputPositionParams = i.getLayoutParams(t),
                this.$superApply("mergeOption", arguments)
            }
        })
    }),
    e("echarts/component/dataZoom/SliderZoomView", [li, si, v, "../../util/throttle", "./DataZoomView", r, "../../util/layout", "../helper/sliderMove"], function(t) {
        function e(t) {
            return "x" === t ? "y" : "x"
        }
        var i = t(si)
          , n = t(v)
          , o = t("../../util/throttle")
          , l = t("./DataZoomView")
          , u = n.Rect
          , c = t(r)
          , h = c[C]
          , d = t("../../util/layout")
          , f = t("../helper/sliderMove")
          , p = c.asc
          , m = i.bind
          , g = Math.round
          , y = Math.max
          , _ = i.each
          , S = 7
          , T = 1
          , A = 30
          , L = s
          , k = "vertical"
          , P = 5
          , D = ["line", "bar", "candlestick", "scatter"];
        return l[Ze]({
            type: "dataZoom.slider",
            init: function(t, e) {
                this._displayables = {},
                this._orient,
                this._range,
                this._handleEnds,
                this._size,
                this._halfHandleSize,
                this._location,
                this._dragging,
                this._dataShadowInfo,
                this.api = e
            },
            render: function(t, e, i, n) {
                return this.$superApply("render", arguments),
                o.createOrUpdate(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"), "fixRate"),
                this._orient = t.get(a),
                this._halfHandleSize = g(t.get("handleSize") / 2),
                this.dataZoomModel.get("show") === !1 ? void this.group[pe]() : (n && "dataZoom" === n.type && n.from === this.uid || this._buildView(),
                void this._updateView())
            },
            remove: function() {
                this.$superApply(Ne, arguments),
                o.clear(this, "_dispatchZoomAction")
            },
            dispose: function() {
                this.$superApply(De, arguments),
                o.clear(this, "_dispatchZoomAction")
            },
            _buildView: function() {
                var t = this.group;
                t[pe](),
                this._resetLocation(),
                this._resetInterval();
                var e = this._displayables.barGroup = new n.Group;
                this._renderBackground(),
                this._renderDataShadow(),
                this._renderHandle(),
                t.add(e),
                this._positionGroup()
            },
            _resetLocation: function() {
                var t = this.dataZoomModel
                  , e = this.api
                  , i = this._findCoordRect()
                  , n = {
                    width: e[$e](),
                    height: e[Ye]()
                }
                  , r = this._orient === L ? {
                    left: i.x,
                    top: n[He] - A - S,
                    width: i.width,
                    height: A
                } : {
                    right: S,
                    top: i.y,
                    width: A,
                    height: i[He]
                };
                d.mergeLayoutParam(r, t.inputPositionParams);
                var a = d[oe](r, n, t.padding);
                this._location = {
                    x: a.x,
                    y: a.y
                },
                this._size = [a.width, a[He]],
                this._orient === k && this._size.reverse()
            },
            _positionGroup: function() {
                var t = this.group
                  , e = this._location
                  , i = this._orient
                  , n = this.dataZoomModel.getFirstTargetAxisModel()
                  , r = n && n.get(b)
                  , a = this._displayables.barGroup
                  , o = (this._dataShadowInfo || {}).otherAxisInverse;
                a.attr(i !== L || r ? i === L && r ? {
                    scale: o ? [-1, 1] : [-1, -1]
                } : i !== k || r ? {
                    scale: o ? [-1, -1] : [-1, 1],
                    rotation: Math.PI / 2
                } : {
                    scale: o ? [1, -1] : [1, 1],
                    rotation: Math.PI / 2
                } : {
                    scale: o ? [1, 1] : [1, -1]
                });
                var s = t[se]([a]);
                t[re][0] = e.x - s.x,
                t[re][1] = e.y - s.y
            },
            _getViewExtent: function() {
                var t = this._halfHandleSize
                  , e = y(this._size[0], 4 * t)
                  , i = [t, e - t];
                return i
            },
            _renderBackground: function() {
                var t = this.dataZoomModel
                  , e = this._size;
                this._displayables.barGroup.add(new u({
                    silent: !0,
                    shape: {
                        x: 0,
                        y: 0,
                        width: e[0],
                        height: e[1]
                    },
                    style: {
                        fill: t.get(Xe)
                    }
                }))
            },
            _renderDataShadow: function() {
                var t = this._dataShadowInfo = this._prepareDataShadowInfo();
                if (t) {
                    var e = this._size
                      , i = t[Ie]
                      , r = i.getRawData()
                      , a = i.getShadowDim ? i.getShadowDim() : t.otherDim
                      , o = r.getDataExtent(a)
                      , s = .3 * (o[1] - o[0]);
                    o = [o[0] - s, o[1] + s];
                    var l = [0, e[1]]
                      , u = [0, e[0]]
                      , c = [[e[0], 0], [0, 0]]
                      , d = u[1] / (r.count() - 1)
                      , f = 0
                      , p = Math.round(r.count() / e[0]);
                    r.each([a], function(t, e) {
                        if (p > 0 && e % p)
                            return void (f += d);
                        var i = null == t || isNaN(t) || "" === t ? null : h(t, o, l, !0);
                        null != i && c.push([f, i]),
                        f += d
                    }),
                    this._displayables.barGroup.add(new n.Polyline({
                        shape: {
                            points: c
                        },
                        style: {
                            fill: this.dataZoomModel.get("dataBackgroundColor"),
                            lineWidth: 0
                        },
                        silent: !0,
                        z2: -20
                    }))
                }
            },
            _prepareDataShadowInfo: function() {
                var t = this.dataZoomModel
                  , n = t.get("showDataShadow");
                if (n !== !1) {
                    var r, a = this[q];
                    return t.eachTargetAxis(function(o, s) {
                        var l = t.getAxisProxy(o.name, s).getTargetSeriesModels();
                        i.each(l, function(t) {
                            if (!(r || n !== !0 && i[_e](D, t.get("type")) < 0)) {
                                var l = e(o.name)
                                  , u = a[W](o.axis, s).axis;
                                r = {
                                    thisAxis: u,
                                    series: t,
                                    thisDim: o.name,
                                    otherDim: l,
                                    otherAxisInverse: t[de].getOtherAxis(u)[b]
                                }
                            }
                        }, this)
                    }, this),
                    r
                }
            },
            _renderHandle: function() {
                var t = this._displayables
                  , e = t.handles = []
                  , i = t.handleLabels = []
                  , r = this._displayables.barGroup
                  , a = this._size;
                r.add(t.filler = new u({
                    draggable: !0,
                    cursor: "move",
                    drift: m(this._onDragMove, this, "all"),
                    ondragend: m(this._onDragEnd, this),
                    onmouseover: m(this._showDataInfo, this, !0),
                    onmouseout: m(this._showDataInfo, this, !1),
                    style: {
                        fill: this.dataZoomModel.get("fillerColor"),
                        textPosition: "inside"
                    }
                })),
                r.add(new u(n.subPixelOptimizeRect({
                    silent: !0,
                    shape: {
                        x: 0,
                        y: 0,
                        width: a[0],
                        height: a[1]
                    },
                    style: {
                        stroke: this.dataZoomModel.get("dataBackgroundColor"),
                        lineWidth: T,
                        fill: "rgba(0,0,0,0)"
                    }
                }))),
                _([0, 1], function(t) {
                    r.add(e[t] = new u({
                        style: {
                            fill: this.dataZoomModel.get("handleColor")
                        },
                        cursor: "move",
                        draggable: !0,
                        drift: m(this._onDragMove, this, t),
                        ondragend: m(this._onDragEnd, this),
                        onmouseover: m(this._showDataInfo, this, !0),
                        onmouseout: m(this._showDataInfo, this, !1)
                    }));
                    var a = this.dataZoomModel.textStyleModel;
                    this.group.add(i[t] = new n.Text({
                        silent: !0,
                        invisible: !0,
                        style: {
                            x: 0,
                            y: 0,
                            text: "",
                            textBaseline: "middle",
                            textAlign: "center",
                            fill: a[le](),
                            textFont: a[ue]()
                        }
                    }))
                }, this)
            },
            _resetInterval: function() {
                var t = this._range = this.dataZoomModel.getPercentRange();
                this._handleEnds = h(t, [0, 100], this._getViewExtent(), !0)
            },
            _updateInterval: function(t, e) {
                var i = this._handleEnds
                  , n = this._getViewExtent();
                f(e, i, n, "all" === t || this.dataZoomModel.get("zoomLock") ? "rigid" : "cross", t),
                this._range = p(h(i, n, [0, 100], !0))
            },
            _updateView: function() {
                var t = this._displayables
                  , e = this._handleEnds
                  , i = p(e.slice())
                  , n = this._size
                  , r = this._halfHandleSize;
                _([0, 1], function(i) {
                    var a = t.handles[i];
                    a[z]({
                        x: e[i] - r,
                        y: -1,
                        width: 2 * r,
                        height: n[1] + 2,
                        r: 1
                    })
                }, this),
                t.filler[z]({
                    x: i[0],
                    y: 0,
                    width: i[1] - i[0],
                    height: this._size[1]
                }),
                this._updateDataInfo()
            },
            _updateDataInfo: function() {
                function t(t) {
                    var e = n.getTransform(i.handles[t], this.group)
                      , s = n.transformDirection(0 === t ? "right" : "left", e)
                      , l = this._halfHandleSize + P
                      , c = n[F]([u[t] + (0 === t ? -l : l), this._size[1] / 2], e);
                    r[t][ne]({
                        x: c[0],
                        y: c[1],
                        textBaseline: a === L ? M : s,
                        textAlign: a === L ? s : ae,
                        text: o[t]
                    })
                }
                var e = this.dataZoomModel
                  , i = this._displayables
                  , r = i.handleLabels
                  , a = this._orient
                  , o = ["", ""];
                if (e.get("showDetail")) {
                    var s, l;
                    e.eachTargetAxis(function(t, i) {
                        s || (s = e.getAxisProxy(t.name, i).getDataValueWindow(),
                        l = this[q][W](t.axis, i).axis)
                    }, this),
                    s && (o = [this._formatLabel(s[0], l), this._formatLabel(s[1], l)])
                }
                var u = p(this._handleEnds.slice());
                t.call(this, 0),
                t.call(this, 1)
            },
            _formatLabel: function(t, e) {
                var n = this.dataZoomModel
                  , r = n.get("labelFormatter");
                if (i.isFunction(r))
                    return r(t);
                var a = n.get("labelPrecision");
                return (null == a || "auto" === a) && (a = e.getPixelPrecision()),
                t = null == t && isNaN(t) ? "" : e.type === x || "time" === e.type ? e.scale[K](Math.round(t)) : t[w](Math.min(a, 20)),
                i[me](r) && (t = r[we]("{value}", t)),
                t
            },
            _showDataInfo: function(t) {
                t = this._dragging || t;
                var e = this._displayables.handleLabels;
                e[0].attr("invisible", !t),
                e[1].attr("invisible", !t)
            },
            _onDragMove: function(t, e, i) {
                this._dragging = !0;
                var n = this._applyBarTransform([e, i], !0);
                this._updateInterval(t, n[0]),
                this._updateView(),
                this.dataZoomModel.get("realtime") && this._dispatchZoomAction()
            },
            _onDragEnd: function() {
                this._dragging = !1,
                this._showDataInfo(!1),
                this._dispatchZoomAction()
            },
            _dispatchZoomAction: function() {
                var t = this._range;
                this.api[Ee]({
                    type: "dataZoom",
                    from: this.uid,
                    dataZoomId: this.dataZoomModel.id,
                    start: t[0],
                    end: t[1]
                })
            },
            _applyBarTransform: function(t, e) {
                var i = this._displayables.barGroup.getLocalTransform();
                return n[F](t, i, e)
            },
            _findCoordRect: function() {
                var t, e = this.getTargetInfo();
                if (e.cartesians[Ve])
                    t = e.cartesians[0].model[de][fe]();
                else {
                    var i = this.api[$e]()
                      , n = this.api[Ye]();
                    t = {
                        x: .2 * i,
                        y: .2 * n,
                        width: .6 * i,
                        height: .6 * n
                    }
                }
                return t
            }
        })
    }),
    e("echarts/component/dataZoom/InsideZoomModel", [li, "./DataZoomModel"], function(t) {
        var e = t("./DataZoomModel");
        return e[Ze]({
            type: "dataZoom.inside",
            defaultOption: {
                zoomLock: !1
            }
        })
    }),
    e("echarts/component/dataZoom/InsideZoomView", [li, "./DataZoomView", "../../util/throttle", si, "../helper/sliderMove", "../../component/helper/RoamController"], function(t) {
        function e(t, e, i, r) {
            e = e.slice();
            var a = r.axisModels[0];
            if (a) {
                var o = n(t, a, i)
                  , s = o.signal * (e[1] - e[0]) * o.pixel / o.pixelLength;
                return l(s, e, [0, 100], "rigid"),
                e
            }
        }
        function i(t, e, i, a, o) {
            i = i.slice();
            var s = o.axisModels[0];
            if (s) {
                var l = n(e, s, a)
                  , u = l.pixel - l.pixelStart
                  , c = u / l.pixelLength * (i[1] - i[0]) + i[0];
                return t = Math.max(t, 0),
                i[0] = (i[0] - c) * t + c,
                i[1] = (i[1] - c) * t + c,
                r(i)
            }
        }
        function n(t, e, i) {
            var n = e.axis
              , r = i.rect
              , a = {};
            return "x" === n.dim ? (a.pixel = t[0],
            a.pixelLength = r.width,
            a.pixelStart = r.x,
            a.signal = n[b] ? 1 : -1) : (a.pixel = t[1],
            a.pixelLength = r[He],
            a.pixelStart = r.y,
            a.signal = n[b] ? -1 : 1),
            a
        }
        function r(t) {
            var e = [0, 100];
            return !(t[0] <= e[1]) && (t[0] = e[1]),
            !(t[1] <= e[1]) && (t[1] = e[1]),
            !(t[0] >= e[0]) && (t[0] = e[0]),
            !(t[1] >= e[0]) && (t[1] = e[0]),
            t
        }
        var a = t("./DataZoomView")
          , o = t("../../util/throttle")
          , s = t(si)
          , l = t("../helper/sliderMove")
          , u = t("../../component/helper/RoamController")
          , c = s.bind;
        return a[Ze]({
            type: "dataZoom.inside",
            init: function() {
                this._controllers = {},
                this._range
            },
            render: function(t, e, i, n) {
                this.$superApply("render", arguments),
                o.createOrUpdate(this, "_dispatchZoomAction", this.dataZoomModel.get("throttle"), "fixRate"),
                n && "dataZoom" === n.type && n.from === this.uid || (this._range = t.getPercentRange()),
                this._resetController(i)
            },
            remove: function() {
                this.$superApply(Ne, arguments);
                var t = this._controllers;
                s.each(t, function(t) {
                    t.off("pan").off("zoom")
                }),
                t[Ve] = 0,
                o.clear(this, "_dispatchZoomAction")
            },
            dispose: function() {
                this.$superApply(De, arguments),
                o.clear(this, "_dispatchZoomAction")
            },
            _resetController: function(t) {
                var e = this._controllers
                  , i = this.getTargetInfo();
                s.each(i.cartesians, function(i) {
                    var n = "cartesian" + i.coordIndex
                      , r = e[n];
                    r || (r = e[n] = new u(t.getZr()),
                    r.enable(),
                    r.on("pan", c(this._onPan, this, r, i)),
                    r.on("zoom", c(this._onZoom, this, r, i))),
                    r.rect = i.model[de][fe]().clone()
                }, this)
            },
            _onPan: function(t, i, n, r) {
                var a = this._range = e([n, r], this._range, t, i);
                a && this._dispatchZoomAction(a)
            },
            _onZoom: function(t, e, n, r, a) {
                var o = this.dataZoomModel;
                if (!o[Ke].zoomLock) {
                    n = 1 / n;
                    var s = this._range = i(n, [r, a], this._range, t, e, o);
                    this._dispatchZoomAction(s)
                }
            },
            _dispatchZoomAction: function(t) {
                this.api[Ee]({
                    type: "dataZoom",
                    from: this.uid,
                    dataZoomId: this.dataZoomModel.id,
                    start: t[0],
                    end: t[1]
                })
            }
        })
    }),
    e("echarts/component/dataZoom/dataZoomAction", [li, si, "../../util/model", m], function(t) {
        var e = t(si)
          , i = t("../../util/model")
          , n = t(m);
        n.registerAction("dataZoom", function(t, n) {
            var r = i.createLinkedNodesFinder(e.bind(n[je], n, "dataZoom"), i.eachAxisDim, function(t, e) {
                return t.get(e.axisIndex)
            })
              , a = [];
            n[je]({
                mainType: "dataZoom",
                query: t
            }, function(t) {
                a.push.apply(a, r(t).nodes)
            }),
            e.each(a, function(e) {
                e.setRawRange({
                    start: t.start,
                    end: t.end,
                    startValue: t.startValue,
                    endValue: t.endValue
                })
            })
        })
    }),
    e("echarts/component/dataZoom/dataZoomProcessor", [li, m, r], function(t) {
        function e(t, e, i, n) {
            var r = t.name
              , o = i.getAxisProxy(r, e);
            o.reset(i);
            var s = o.getDataPercentWindow()
              , l = o.getDataValueWindow()
              , u = n[W](t.axis, e)
              , c = 0 === s[0] && 100 === s[1]
              , h = o.getBackup()
              , d = a.getPixelPrecision(l, [0, 500])
              , f = !(20 > d && d >= 0);
            u.setNeedsCrossZero && u.setNeedsCrossZero(c ? !h.scale : !1),
            u.setMin && u.setMin(c || f ? h.min : +l[0][w](d)),
            u.setMax && u.setMax(c || f ? h.max : +l[1][w](d))
        }
        function i(t, e, i) {
            i.getAxisProxy(t.name, e).filterData(i)
        }
        var n = t(m)
          , a = t(r);
        n.registerProcessor(ri, function(t) {
            t[je]("dataZoom", function(t) {
                t.eachTargetAxis(e);
                var i = t.findRepresentativeAxisProxy()
                  , n = i.getDataPercentWindow()
                  , r = i.getDataValueWindow();
                t.setRawRange({
                    start: n[0],
                    end: n[1],
                    startValue: r[0],
                    endValue: r[1]
                })
            }),
            t[je]("dataZoom", function(t) {
                t.eachTargetAxis(i)
            })
        })
    }),
    e("zrender/vml/graphic", [li, "../core/env", "../core/vector", "../core/BoundingRect", "../core/PathProxy", "../tool/color", "../contain/text", "../graphic/mixin/RectText", "../graphic/Displayable", "../graphic/Image", "../graphic/Text", "../graphic/Path", "../graphic/Gradient", "./core"], function(t) {
        if (!t("../core/env")[Ue]) {
            var e = t("../core/vector")
              , n = t("../core/BoundingRect")
              , r = t("../core/PathProxy").CMD
              , a = t("../tool/color")
              , o = t("../contain/text")
              , s = t("../graphic/mixin/RectText")
              , l = t("../graphic/Displayable")
              , u = t("../graphic/Image")
              , c = t("../graphic/Text")
              , h = t("../graphic/Path")
              , d = t("../graphic/Gradient")
              , f = t("./core")
              , p = Math.round
              , m = Math.sqrt
              , v = Math.abs
              , g = Math.cos
              , y = Math.sin
              , x = Math.max
              , _ = e[F]
              , b = ","
              , S = "progid:DXImageTransform.Microsoft"
              , C = 21600
              , T = C / 2
              , A = 1e5
              , z = 1e3
              , L = function(t) {
                t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;",
                t.coordsize = C + "," + C,
                t.coordorigin = "0,0"
            }
              , k = function(t) {
                return String(t)[we](/&/g, "&amp;")[we](/"/g, "&quot;")
            }
              , P = function(t, e, i) {
                return "rgb(" + [t, e, i].join(",") + ")"
            }
              , I = function(t, e) {
                e && t && e.parentNode !== t && t.appendChild(e)
            }
              , O = function(t, e) {
                e && t && e.parentNode === t && t.removeChild(e)
            }
              , R = function(t, e, i) {
                return (parseFloat(t) || 0) * A + (parseFloat(e) || 0) * z + i
            }
              , V = function(t, e, i) {
                var n = a.parse(e);
                i = +i,
                isNaN(i) && (i = 1),
                n && (t.color = P(n[0], n[1], n[2]),
                t[ie] = i * n[3])
            }
              , E = function(t) {
                var e = a.parse(t);
                return [P(e[0], e[1], e[2]), e[3]]
            }
              , Z = function(t, e, i) {
                var n = e.fill;
                if (null != n)
                    if (n instanceof d) {
                        var r, a = 0, o = [0, 0], s = 0, l = 1, u = i[se](), c = u.width, h = u[He];
                        if ("linear" === n.type) {
                            r = "gradient";
                            var f = i[ai]
                              , p = [n.x * c, n.y * h]
                              , m = [n.x2 * c, n.y2 * h];
                            f && (_(p, p, f),
                            _(m, m, f));
                            var v = m[0] - p[0]
                              , g = m[1] - p[1];
                            a = 180 * Math.atan2(v, g) / Math.PI,
                            0 > a && (a += 360),
                            1e-6 > a && (a = 0)
                        } else {
                            r = "gradientradial";
                            var p = [n.x * c, n.y * h]
                              , f = i[ai]
                              , y = i.scale
                              , b = c
                              , w = h;
                            o = [(p[0] - u.x) / b, (p[1] - u.y) / w],
                            f && _(p, p, f),
                            b /= y[0] * C,
                            w /= y[1] * C;
                            var M = x(b, w);
                            s = 0 / M,
                            l = 2 * n.r / M - s
                        }
                        var S = n.colorStops.slice();
                        S.sort(function(t, e) {
                            return t.offset - e.offset
                        });
                        for (var T = S[Ve], A = [], z = [], L = 0; T > L; L++) {
                            var k = S[L]
                              , P = E(k.color);
                            z.push(k.offset * l + s + " " + P[0]),
                            (0 === L || L === T - 1) && A.push(P)
                        }
                        if (T >= 2) {
                            var D = A[0][0]
                              , I = A[1][0]
                              , O = A[0][1] * e[ie]
                              , R = A[1][1] * e[ie];
                            t.type = r,
                            t.method = "none",
                            t.focus = "100%",
                            t.angle = a,
                            t.color = D,
                            t.color2 = I,
                            t.colors = z.join(","),
                            t[ie] = R,
                            t.opacity2 = O
                        }
                        "radial" === r && (t.focusposition = o.join(","))
                    } else
                        V(t, n, e[ie])
            }
              , H = function(t, e) {
                null != e.lineJoin && (t.joinstyle = e.lineJoin),
                null != e.miterLimit && (t.miterlimit = e.miterLimit * C),
                null != e.lineCap && (t.endcap = e.lineCap),
                null != e.lineDash && (t.dashstyle = e.lineDash.join(" ")),
                null == e[N] || e[N]instanceof d || V(t, e[N], e[ie])
            }
              , W = function(t, e, i, n) {
                var r = "fill" == e
                  , a = t.getElementsByTagName(e)[0];
                null != i[e] && "none" !== i[e] && (r || !r && i[G]) ? (t[r ? "filled" : "stroked"] = "true",
                i[e]instanceof d && O(t, a),
                a || (a = f.createNode(e)),
                r ? Z(a, i, n) : H(a, i),
                I(t, a)) : (t[r ? "filled" : "stroked"] = "false",
                O(t, a))
            }
              , q = [[], [], []]
              , j = function(t, e) {
                var i, n, a, o, s, l, u = r.M, c = r.C, h = r.L, d = r.A, f = r.Q, v = [];
                for (o = 0; o < t[Ve]; ) {
                    switch (a = t[o++],
                    n = "",
                    i = 0,
                    a) {
                    case u:
                        n = " m ",
                        i = 1,
                        s = t[o++],
                        l = t[o++],
                        q[0][0] = s,
                        q[0][1] = l;
                        break;
                    case h:
                        n = " l ",
                        i = 1,
                        s = t[o++],
                        l = t[o++],
                        q[0][0] = s,
                        q[0][1] = l;
                        break;
                    case f:
                    case c:
                        n = " c ",
                        i = 3;
                        var x, w, M = t[o++], S = t[o++], A = t[o++], z = t[o++];
                        a === f ? (x = A,
                        w = z,
                        A = (A + 2 * M) / 3,
                        z = (z + 2 * S) / 3,
                        M = (s + 2 * M) / 3,
                        S = (l + 2 * S) / 3) : (x = t[o++],
                        w = t[o++]),
                        q[0][0] = M,
                        q[0][1] = S,
                        q[1][0] = A,
                        q[1][1] = z,
                        q[2][0] = x,
                        q[2][1] = w,
                        s = x,
                        l = w;
                        break;
                    case d:
                        var L = 0
                          , k = 0
                          , P = 1
                          , D = 1
                          , I = 0;
                        e && (L = e[4],
                        k = e[5],
                        P = m(e[0] * e[0] + e[1] * e[1]),
                        D = m(e[2] * e[2] + e[3] * e[3]),
                        I = Math.atan2(-e[1] / D, e[0] / P));
                        var O = t[o++]
                          , R = t[o++]
                          , V = t[o++]
                          , B = t[o++]
                          , E = t[o++] + I
                          , Z = t[o++] + E + I;
                        o++;
                        var N = t[o++]
                          , G = O + g(E) * V
                          , F = R + y(E) * B
                          , M = O + g(Z) * V
                          , S = R + y(Z) * B
                          , H = N ? " wa " : " at ";
                        v.push(H, p(((O - V) * P + L) * C - T), b, p(((R - B) * D + k) * C - T), b, p(((O + V) * P + L) * C - T), b, p(((R + B) * D + k) * C - T), b, p((G * P + L) * C - T), b, p((F * D + k) * C - T), b, p((M * P + L) * C - T), b, p((S * D + k) * C - T)),
                        s = M,
                        l = S;
                        break;
                    case r.R:
                        var W = q[0]
                          , j = q[1];
                        W[0] = t[o++],
                        W[1] = t[o++],
                        j[0] = W[0] + t[o++],
                        j[1] = W[1] + t[o++],
                        e && (_(W, W, e),
                        _(j, j, e)),
                        W[0] = p(W[0] * C - T),
                        j[0] = p(j[0] * C - T),
                        W[1] = p(W[1] * C - T),
                        j[1] = p(j[1] * C - T),
                        v.push(" m ", W[0], b, W[1], " l ", j[0], b, W[1], " l ", j[0], b, j[1], " l ", W[0], b, j[1]);
                        break;
                    case r.Z:
                        v.push(" x ")
                    }
                    if (i > 0) {
                        v.push(n);
                        for (var X = 0; i > X; X++) {
                            var U = q[X];
                            e && _(U, U, e),
                            v.push(p(U[0] * C - T), b, p(U[1] * C - T), i - 1 > X ? b : "")
                        }
                    }
                }
                return v.join("")
            };
            h[ii].brush = function(t) {
                var e = this.style
                  , n = this._vmlEl;
                n || (n = f.createNode("shape"),
                L(n),
                this._vmlEl = n),
                W(n, "fill", e, this),
                W(n, N, e, this);
                var r = this[ai]
                  , a = null != r
                  , o = n.getElementsByTagName(N)[0];
                if (o) {
                    var s = e[G];
                    if (a && !e.strokeNoScale) {
                        var l = r[0] * r[3] - r[1] * r[2];
                        s *= m(v(l))
                    }
                    o.weight = s + "px"
                }
                var u = this.path;
                this.__dirtyPath && (u.beginPath(),
                this[i](u, this.shape),
                this.__dirtyPath = !1),
                n.path = j(u.data, this[ai]),
                n.style.zIndex = R(this[Se], this.z, this.z2),
                I(t, n),
                e.text && this.drawRectText(t, this[se]())
            }
            ,
            h[ii].onRemoveFromStorage = function(t) {
                O(t, this._vmlEl),
                this.removeRectText(t)
            }
            ,
            h[ii].onAddToStorage = function(t) {
                I(t, this._vmlEl),
                this.appendRectText(t)
            }
            ;
            var X = function(t) {
                return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase()
            };
            u[ii].brush = function(t) {
                var e, i, n = this.style, r = n.image;
                if (X(r)) {
                    var a = r.src;
                    if (a === this._imageSrc)
                        e = this._imageWidth,
                        i = this._imageHeight;
                    else {
                        var o = r.runtimeStyle
                          , s = o.width
                          , l = o[He];
                        o.width = "auto",
                        o[He] = "auto",
                        e = r.width,
                        i = r[He],
                        o.width = s,
                        o[He] = l,
                        this._imageSrc = a,
                        this._imageWidth = e,
                        this._imageHeight = i
                    }
                    r = a
                } else
                    r === this._imageSrc && (e = this._imageWidth,
                    i = this._imageHeight);
                if (r) {
                    var u = n.x || 0
                      , c = n.y || 0
                      , h = n.width
                      , d = n[He]
                      , v = n.sWidth
                      , g = n.sHeight
                      , y = n.sx || 0
                      , w = n.sy || 0
                      , M = v && g
                      , C = this._vmlEl;
                    C || (C = f.doc[D]("div"),
                    L(C),
                    this._vmlEl = C);
                    var T, A = C.style, z = !1, k = 1, P = 1;
                    if (this[ai] && (T = this[ai],
                    k = m(T[0] * T[0] + T[1] * T[1]),
                    P = m(T[2] * T[2] + T[3] * T[3]),
                    z = T[1] || T[2]),
                    z) {
                        var O = [u, c]
                          , V = [u + h, c]
                          , B = [u, c + d]
                          , E = [u + h, c + d];
                        _(O, O, T),
                        _(V, V, T),
                        _(B, B, T),
                        _(E, E, T);
                        var Z = x(O[0], V[0], B[0], E[0])
                          , N = x(O[1], V[1], B[1], E[1])
                          , G = [];
                        G.push("M11=", T[0] / k, b, "M12=", T[2] / P, b, "M21=", T[1] / k, b, "M22=", T[3] / P, b, "Dx=", p(u * k + T[4]), b, "Dy=", p(c * P + T[5])),
                        A.padding = "0 " + p(Z) + "px " + p(N) + "px 0",
                        A[ri] = S + ".Matrix(" + G.join("") + ", SizingMethod=clip)"
                    } else
                        T && (u = u * k + T[4],
                        c = c * P + T[5]),
                        A[ri] = "",
                        A.left = p(u) + "px",
                        A.top = p(c) + "px";
                    var F = this._imageEl
                      , H = this._cropEl;
                    F || (F = f.doc[D]("div"),
                    this._imageEl = F);
                    var W = F.style;
                    if (M) {
                        if (e && i)
                            W.width = p(k * e * h / v) + "px",
                            W[He] = p(P * i * d / g) + "px";
                        else {
                            var q = new Image
                              , j = this;
                            q.onload = function() {
                                q.onload = null,
                                e = q.width,
                                i = q[He],
                                W.width = p(k * e * h / v) + "px",
                                W[He] = p(P * i * d / g) + "px",
                                j._imageWidth = e,
                                j._imageHeight = i,
                                j._imageSrc = r
                            }
                            ,
                            q.src = r
                        }
                        H || (H = f.doc[D]("div"),
                        H.style.overflow = "hidden",
                        this._cropEl = H);
                        var U = H.style;
                        U.width = p((h + y * h / v) * k),
                        U[He] = p((d + w * d / g) * P),
                        U[ri] = S + ".Matrix(Dx=" + -y * h / v * k + ",Dy=" + -w * d / g * P + ")",
                        H.parentNode || C.appendChild(H),
                        F.parentNode != H && H.appendChild(F)
                    } else
                        W.width = p(k * h) + "px",
                        W[He] = p(P * d) + "px",
                        C.appendChild(F),
                        H && H.parentNode && (C.removeChild(H),
                        this._cropEl = null);
                    var Y = ""
                      , $ = n[ie];
                    1 > $ && (Y += ".Alpha(opacity=" + p(100 * $) + ") "),
                    Y += S + ".AlphaImageLoader(src=" + r + ", SizingMethod=scale)",
                    W[ri] = Y,
                    C.style.zIndex = R(this[Se], this.z, this.z2),
                    I(t, C),
                    n.text && this.drawRectText(t, this[se]())
                }
            }
            ,
            u[ii].onRemoveFromStorage = function(t) {
                O(t, this._vmlEl),
                this._vmlEl = null,
                this._cropEl = null,
                this._imageEl = null,
                this.removeRectText(t)
            }
            ,
            u[ii].onAddToStorage = function(t) {
                I(t, this._vmlEl),
                this.appendRectText(t)
            }
            ;
            var U, Y = B, $ = {}, K = 0, Q = 100, J = document[D]("div"), te = function(t) {
                var e = $[t];
                if (!e) {
                    K > Q && (K = 0,
                    $ = {});
                    var i, n = J.style;
                    try {
                        n.font = t,
                        i = n.fontFamily.split(",")[0]
                    } catch (r) {}
                    e = {
                        style: n.fontStyle || Y,
                        variant: n.fontVariant || Y,
                        weight: n.fontWeight || Y,
                        size: 0 | parseFloat(n.fontSize || 12),
                        family: i || "Microsoft YaHei"
                    },
                    $[t] = e,
                    K++
                }
                return e
            };
            o.measureText = function(t, e) {
                var i = f.doc;
                U || (U = i[D]("div"),
                U.style.cssText = "position:absolute;top:-20000px;left:0;                padding:0;margin:0;border:none;white-space:pre;",
                f.doc.body.appendChild(U));
                try {
                    U.style.font = e
                } catch (n) {}
                return U.innerHTML = "",
                U.appendChild(i.createTextNode(t)),
                {
                    width: U.offsetWidth
                }
            }
            ;
            for (var ee = new n, ne = function(t, e, i, n) {
                var r = this.style
                  , a = r.text;
                if (a) {
                    var s, l, u = r[ce], c = te(r.textFont), h = c.style + " " + c.variant + " " + c.weight + " " + c.size + 'px "' + c.family + '"', d = r.textBaseline;
                    i = i || o[se](a, h, u, d);
                    var m = this[ai];
                    if (m && !n && (ee.copy(e),
                    ee[F](m),
                    e = ee),
                    n)
                        s = e.x,
                        l = e.y;
                    else {
                        var v = r.textPosition
                          , g = r.textDistance;
                        if (v instanceof Array)
                            s = e.x + v[0],
                            l = e.y + v[1],
                            u = u || "left",
                            d = d || "top";
                        else {
                            var y = o.adjustTextPositionOnRect(v, e, i, g);
                            s = y.x,
                            l = y.y,
                            u = u || y[ce],
                            d = d || y.textBaseline
                        }
                    }
                    var x = c.size;
                    switch (d) {
                    case "hanging":
                    case "top":
                        l += x / 1.75;
                        break;
                    case M:
                        break;
                    default:
                        l -= x / 2.25
                    }
                    switch (u) {
                    case "left":
                        break;
                    case ae:
                        s -= i.width / 2;
                        break;
                    case "right":
                        s -= i.width
                    }
                    var S, C, T, A = f.createNode, z = this._textVmlEl;
                    z ? (T = z.firstChild,
                    S = T.nextSibling,
                    C = S.nextSibling) : (z = A("line"),
                    S = A("path"),
                    C = A("textpath"),
                    T = A("skew"),
                    C.style["v-text-align"] = "left",
                    L(z),
                    S.textpathok = !0,
                    C.on = !0,
                    z.from = "0 0",
                    z.to = "1000 0.05",
                    I(z, T),
                    I(z, S),
                    I(z, C),
                    this._textVmlEl = z);
                    var P = [s, l]
                      , D = z.style;
                    m && n ? (_(P, P, m),
                    T.on = !0,
                    T.matrix = m[0][w](3) + b + m[2][w](3) + b + m[1][w](3) + b + m[3][w](3) + ",0,0",
                    T.offset = (p(P[0]) || 0) + "," + (p(P[1]) || 0),
                    T.origin = "0 0",
                    D.left = "0px",
                    D.top = "0px") : (T.on = !1,
                    D.left = p(s) + "px",
                    D.top = p(l) + "px"),
                    C[ei] = k(a);
                    try {
                        C.style.font = h
                    } catch (O) {}
                    W(z, "fill", {
                        fill: n ? r.fill : r.textFill,
                        opacity: r[ie]
                    }, this),
                    W(z, N, {
                        stroke: n ? r[N] : r.textStroke,
                        opacity: r[ie],
                        lineDash: r.lineDash
                    }, this),
                    z.style.zIndex = R(this[Se], this.z, this.z2),
                    I(t, z)
                }
            }, re = function(t) {
                O(t, this._textVmlEl),
                this._textVmlEl = null
            }, oe = function(t) {
                I(t, this._textVmlEl)
            }, le = [s, l, u, h, c], ue = 0; ue < le[Ve]; ue++) {
                var he = le[ue][ii];
                he.drawRectText = ne,
                he.removeRectText = re,
                he.appendRectText = oe
            }
            c[ii].brush = function(t) {
                var e = this.style;
                e.text && this.drawRectText(t, {
                    x: e.x || 0,
                    y: e.y || 0,
                    width: 0,
                    height: 0
                }, this[se](), !0)
            }
            ,
            c[ii].onRemoveFromStorage = function(t) {
                this.removeRectText(t)
            }
            ,
            c[ii].onAddToStorage = function(t) {
                this.appendRectText(t)
            }
        }
    }),
    e("zrender/vml/Painter", [li, "../core/log", "./core"], function(t) {
        function e(t) {
            return parseInt(t, 10)
        }
        function i(t, e) {
            a.initVML(),
            this.root = t,
            this.storage = e;
            var i = document[D]("div")
              , n = document[D]("div");
            i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",
            n.style.cssText = "position:absolute;left:0;top:0;",
            t.appendChild(i),
            this._vmlRoot = n,
            this._vmlViewport = i,
            this[Je]();
            var r = e.delFromMap
              , o = e.addToMap;
            e.delFromMap = function(t) {
                var i = e.get(t);
                r.call(e, t),
                i && i.onRemoveFromStorage && i.onRemoveFromStorage(n)
            }
            ,
            e.addToMap = function(t) {
                t.onAddToStorage && t.onAddToStorage(n),
                o.call(e, t)
            }
            ,
            this._firstPaint = !0
        }
        function n(t) {
            return function() {
                r('In IE8.0 VML mode painter not support method "' + t + '"')
            }
        }
        var r = t("../core/log")
          , a = t("./core");
        i[ii] = {
            constructor: i,
            getViewportRoot: function() {
                return this._vmlViewport
            },
            refresh: function() {
                var t = this.storage.getDisplayList(!0);
                this._paintList(t)
            },
            _paintList: function(t) {
                for (var e = this._vmlRoot, i = 0; i < t[Ve]; i++) {
                    var n = t[i];
                    n.__dirty && !n.invisible && (n.beforeBrush && n.beforeBrush(),
                    n.brush(e),
                    n.afterBrush && n.afterBrush()),
                    n.__dirty = !1
                }
                this._firstPaint && (this._vmlViewport.appendChild(e),
                this._firstPaint = !1)
            },
            resize: function() {
                var t = this._getWidth()
                  , e = this._getHeight();
                if (this._width != t && this._height != e) {
                    this._width = t,
                    this._height = e;
                    var i = this._vmlViewport.style;
                    i.width = t + "px",
                    i[He] = e + "px"
                }
            },
            dispose: function() {
                this.root.innerHTML = "",
                this._vmlRoot = this._vmlViewport = this.storage = null
            },
            getWidth: function() {
                return this._width
            },
            getHeight: function() {
                return this._height
            },
            _getWidth: function() {
                var t = this.root
                  , i = t.currentStyle;
                return (t.clientWidth || e(i.width)) - e(i.paddingLeft) - e(i.paddingRight) | 0
            },
            _getHeight: function() {
                var t = this.root
                  , i = t.currentStyle;
                return (t.clientHeight || e(i[He])) - e(i.paddingTop) - e(i.paddingBottom) | 0
            }
        };
        for (var o = ["getLayer", "insertLayer", "eachLayer", "eachBuildinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"], s = 0; s < o[Ve]; s++) {
            var l = o[s];
            i[ii][l] = n(l)
        }
        return i
    }),
    e("echarts/scale/Interval", [li, ee, "../util/format", "./Scale"], function(t) {
        var e = t(ee)
          , i = t("../util/format")
          , n = t("./Scale")
          , r = Math.floor
          , a = Math.ceil
          , o = n[Ze]({
            type: "interval",
            _interval: 0,
            setExtent: function(t, e) {
                var i = this._extent;
                isNaN(t) || (i[0] = parseFloat(t)),
                isNaN(e) || (i[1] = parseFloat(e))
            },
            unionExtent: function(t) {
                var e = this._extent;
                t[0] < e[0] && (e[0] = t[0]),
                t[1] > e[1] && (e[1] = t[1]),
                o[ii].setExtent.call(this, e[0], e[1])
            },
            getInterval: function() {
                return this._interval || this.niceTicks(),
                this._interval
            },
            setInterval: function(t) {
                this._interval = t,
                this._niceExtent = this._extent.slice()
            },
            getTicks: function() {
                this._interval || this.niceTicks();
                var t = this._interval
                  , i = this._extent
                  , n = []
                  , r = 1e4;
                if (t) {
                    var a = this._niceExtent;
                    i[0] < a[0] && n.push(i[0]);
                    for (var o = a[0]; o <= a[1]; )
                        if (n.push(o),
                        o = e.round(o + t),
                        n[Ve] > r)
                            return [];
                    i[1] > a[1] && n.push(i[1])
                }
                return n
            },
            getTicksLabels: function() {
                for (var t = [], e = this[Q](), i = 0; i < e[Ve]; i++)
                    t.push(this[K](e[i]));
                return t
            },
            getLabel: function(t) {
                return i.addCommas(t)
            },
            niceTicks: function(t) {
                t = t || 10;
                var i = this._extent
                  , n = i[1] - i[0];
                if (!(1 / 0 === n || 0 >= n)) {
                    var o = Math.pow(10, Math.floor(Math.log(n / t) / Math.LN10))
                      , s = t / n * o;
                    .15 >= s ? o *= 10 : .3 >= s ? o *= 5 : .45 >= s ? o *= 3 : .75 >= s && (o *= 2);
                    var l = [e.round(a(i[0] / o) * o), e.round(r(i[1] / o) * o)];
                    this._interval = o,
                    this._niceExtent = l
                }
            },
            niceExtent: function(t, i, n) {
                var o = this._extent;
                if (o[0] === o[1])
                    if (0 !== o[0]) {
                        var s = o[0] / 2;
                        o[0] -= s,
                        o[1] += s
                    } else
                        o[1] = 1;
                o[1] === -1 / 0 && 1 / 0 === o[0] && (o[0] = 0,
                o[1] = 1),
                this.niceTicks(t, i, n);
                var l = this._interval;
                i || (o[0] = e.round(r(o[0] / l) * l)),
                n || (o[1] = e.round(a(o[1] / l) * l))
            }
        });
        return o[J] = function() {
            return new o
        }
        ,
        o
    }),
    e("echarts/component/toolbox/ToolboxView", [li, "./featureManager", si, v, "../../model/Model", "../../data/DataDiffer", "../helper/listComponent", "zrender/contain/text", m], function(t) {
        var e = t("./featureManager")
          , i = t(si)
          , n = t(v)
          , r = t("../../model/Model")
          , a = t("../../data/DataDiffer")
          , o = t("../helper/listComponent")
          , s = t("zrender/contain/text");
        return t(m)[ye]({
            type: "toolbox",
            render: function(t, l, u) {
                function c(i, n) {
                    var a, o = v[i], s = v[n], c = p[o], d = new r(c,t,t[q]);
                    if (o && !s) {
                        var f = e.get(o);
                        if (!f)
                            return;
                        m[o] = a = new f(d)
                    } else {
                        if (a = m[s],
                        !a)
                            return;
                        a.model = d
                    }
                    return !o && s ? void (a[De] && a[De](l, u)) : !d.get("show") || a.unusable ? void (a[Ne] && a[Ne](l, u)) : (h(d, a, o),
                    d.setIconStatus = function(t, e) {
                        var i = this[Ke]
                          , n = this.iconPaths;
                        i.iconStatus = i.iconStatus || {},
                        i.iconStatus[t] = e,
                        n[t] && n[t][Re](e)
                    }
                    ,
                    void (a.render && a.render(d, l, u)))
                }
                function h(e, r, a) {
                    var o = e[Qe]("iconStyle")
                      , s = r.getIcons ? r.getIcons() : e.get("icon")
                      , c = e.get("title") || {};
                    if (typeof s === ei) {
                        var h = s
                          , p = c;
                        s = {},
                        c = {},
                        s[a] = h,
                        c[a] = p
                    }
                    var m = e.iconPaths = {};
                    i.each(s, function(a, s) {
                        var h = o[Qe](B).getItemStyle()
                          , p = o[Qe](E).getItemStyle()
                          , v = n.makePath(a, {
                            style: h,
                            hoverStyle: p,
                            rectHover: !0
                        }, {
                            x: -f / 2,
                            y: -f / 2,
                            width: f,
                            height: f
                        }, ae);
                        n[Z](v),
                        t.get("showTitle") && (v.__title = c[s],
                        v.on(ke, function() {
                            v[ne]({
                                text: c[s],
                                textPosition: p.textPosition || We,
                                textFill: p.fill || p[N] || "#000",
                                textAlign: p[ce] || ae
                            })
                        }).on(Le, function() {
                            v[ne]({
                                textFill: null
                            })
                        })),
                        v[Re](e.get("iconStatus." + s) || B),
                        d.add(v),
                        v.on("click", i.bind(r.onclick, r, l, u, s)),
                        m[s] = v
                    })
                }
                var d = this.group;
                if (d[pe](),
                t.get("show")) {
                    var f = +t.get("itemSize")
                      , p = t.get("feature") || {}
                      , m = this._features || (this._features = {})
                      , v = [];
                    i.each(p, function(t, e) {
                        v.push(e)
                    }),
                    new a(this._featureNames || [],v).add(c)[Fe](c)[Ne](i.curry(c, null)).execute(),
                    this._featureNames = v,
                    o.layout(d, t, u),
                    o.addBackground(d, t),
                    d.eachChild(function(t) {
                        var e = t.__title
                          , i = t.hoverStyle;
                        if (i && e) {
                            var n = s[se](e, i.font)
                              , r = t[re][0] + d[re][0]
                              , a = t[re][1] + d[re][1] + f
                              , o = !1;
                            a + n[He] > u[Ye]() && (i.textPosition = "top",
                            o = !0);
                            var l = o ? -5 - n[He] : f + 8;
                            r + n.width / 2 > u[$e]() ? (i.textPosition = ["100%", l],
                            i[ce] = "right") : r - n.width / 2 < 0 && (i.textPosition = [0, l],
                            i[ce] = "left")
                        }
                    })
                }
            },
            remove: function(t, e) {
                i.each(this._features, function(i) {
                    i[Ne] && i[Ne](t, e)
                }),
                this.group[pe]()
            },
            dispose: function(t, e) {
                i.each(this._features, function(i) {
                    i[De] && i[De](t, e)
                })
            }
        })
    }),
    e("echarts/component/toolbox/ToolboxModel", [li, "./featureManager", si, m], function(t) {
        var e = t("./featureManager")
          , i = t(si);
        t(m).extendComponentModel({
            type: "toolbox",
            layoutMode: {
                type: "box",
                ignoreSize: !0
            },
            mergeDefaultAndTheme: function() {
                this.$superApply("mergeDefaultAndTheme", arguments),
                i.each(this[Ke].feature, function(t, n) {
                    var r = e.get(n);
                    r && i.merge(t, r.defaultOption)
                })
            },
            defaultOption: {
                show: !0,
                z: 6,
                zlevel: 0,
                orient: "horizontal",
                left: "right",
                top: "top",
                backgroundColor: "transparent",
                borderColor: "#ccc",
                borderWidth: 0,
                padding: 5,
                itemSize: 15,
                itemGap: 8,
                showTitle: !0,
                iconStyle: {
                    normal: {
                        borderColor: "#666",
                        color: "none"
                    },
                    emphasis: {
                        borderColor: "#3E98C5"
                    }
                }
            }
        })
    }),
    e("echarts/component/toolbox/feature/SaveAsImage", [li, "zrender/core/env", "../featureManager"], function(t) {
        function e(t) {
            this.model = t
        }
        var i = t("zrender/core/env");
        e.defaultOption = {
            show: !0,
            icon: "M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6            M29.2,45.1L29.2,0",
            title: "保存为图片",
            type: "png",
            name: "",
            excludeComponents: ["toolbox"],
            pixelRatio: 1,
            lang: ["右键另存为图片"]
        },
        e[ii].unusable = !i[Ue];
        var n = e[ii];
        return n.onclick = function(t, e) {
            var i = this.model
              , n = i.get("name") || t.get("title.0.text") || "echarts"
              , r = document[D]("a")
              , a = i.get("type", !0) || "png";
            r.download = n + "." + a,
            r[ze] = "_blank";
            var o = e.getConnectedDataURL({
                type: a,
                backgroundColor: i.get(Xe, !0) || t.get(Xe) || "#fff",
                excludeComponents: i.get("excludeComponents"),
                pixelRatio: i.get("pixelRatio")
            });
            if (r.href = o,
            typeof MouseEvent === xe) {
                var s = new MouseEvent("click",{
                    view: window,
                    bubbles: !0,
                    cancelable: !1
                });
                r.dispatchEvent(s)
            } else {
                var l = i.get("lang")
                  , u = '<body style="margin:0;">                <img src="' + o + '" style="max-width:100%;" title="' + (l && l[0] || "") + '" />            </body>'
                  , c = window.open();
                c.document.write(u)
            }
        }
        ,
        t("../featureManager").register("saveAsImage", e),
        e
    }),
    e("echarts/component/toolbox/feature/MagicType", [li, si, "../../../echarts", "../featureManager"], function(t) {
        function e(t) {
            this.model = t
        }
        var i = t(si);
        e.defaultOption = {
            show: !0,
            type: [],
            icon: {
                line: "M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",
                bar: "M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",
                stack: "M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z",
                tiled: "M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"
            },
            title: {
                line: "切换为折线图",
                bar: "切换为柱状图",
                stack: "切换为堆叠",
                tiled: "切换为平铺"
            },
            option: {},
            seriesIndex: {}
        };
        var n = e[ii];
        n.getIcons = function() {
            var t = this.model
              , e = t.get("icon")
              , n = {};
            return i.each(t.get("type"), function(t) {
                e[t] && (n[t] = e[t])
            }),
            n
        }
        ;
        var r = {
            line: function(t, e, n, r) {
                return "bar" === t ? i.merge({
                    id: e,
                    type: "line",
                    data: n.get("data"),
                    stack: n.get("stack"),
                    markPoint: n.get("markPoint"),
                    markLine: n.get("markLine")
                }, r.get("option.line")) : void 0
            },
            bar: function(t, e, n, r) {
                return "line" === t ? i.merge({
                    id: e,
                    type: "bar",
                    data: n.get("data"),
                    stack: n.get("stack"),
                    markPoint: n.get("markPoint"),
                    markLine: n.get("markLine")
                }, r.get("option.bar")) : void 0
            },
            stack: function(t, e) {
                return "line" === t || "bar" === t ? {
                    id: e,
                    stack: "__ec_magicType_stack__"
                } : void 0
            },
            tiled: function(t, e) {
                return "line" === t || "bar" === t ? {
                    id: e,
                    stack: ""
                } : void 0
            }
        }
          , a = [["line", "bar"], ["stack", "tiled"]];
        n.onclick = function(t, e, n) {
            var o = this.model
              , s = o.get("seriesIndex." + n);
            if (r[n]) {
                var l = {
                    series: []
                }
                  , u = function(t) {
                    var e = t.subType
                      , a = t.id
                      , s = r[n](e, a, t, o);
                    s && (i[Be](s, t[Ke]),
                    l[Ie].push(s))
                };
                i.each(a, function(t) {
                    i[_e](t, n) >= 0 && i.each(t, function(t) {
                        o.setIconStatus(t, B)
                    })
                }),
                o.setIconStatus(n, E),
                t[je]({
                    mainType: "series",
                    seriesIndex: s
                }, u),
                e[Ee]({
                    type: "changeMagicType",
                    currentType: n,
                    newOption: l
                })
            }
        }
        ;
        var o = t("../../../echarts");
        return o.registerAction({
            type: "changeMagicType",
            event: "magicTypeChanged",
            update: "prepareAndUpdate"
        }, function(t, e) {
            e.mergeOption(t.newOption)
        }),
        t("../featureManager").register("magicType", e),
        e
    }),
    e("echarts/component/toolbox/feature/DataZoom", [li, si, "../../../util/number", "../../helper/SelectController", "zrender/core/BoundingRect", "zrender/container/Group", "../../dataZoom/history", "../../helper/interactionMutex", "../../dataZoomSelect", "../featureManager", "../../../echarts"], function(t) {
        function e(t) {
            this.model = t,
            this._controllerGroup,
            this._controller,
            this._isZoomActive
        }
        function i(t, e) {
            var i = [{
                axisModel: t[_]("x").model,
                axisIndex: 0
            }, {
                axisModel: t[_]("y").model,
                axisIndex: 0
            }];
            return i.grid = t,
            e[je]({
                mainType: "dataZoom",
                subType: "select"
            }, function(t) {
                n("xAxis", i[0].axisModel, t, e) && (i[0].dataZoomModel = t),
                n("yAxis", i[1].axisModel, t, e) && (i[1].dataZoomModel = t)
            }),
            i
        }
        function n(t, e, i, n) {
            var r = i.get(t + "Index");
            return null != r && n[W](t, r) === e
        }
        function r(t, e) {
            var i = e.grid
              , n = new c(t[0][0],t[1][0],t[0][1] - t[0][0],t[1][1] - t[1][0]);
            if (n.intersect(i[fe]())) {
                var r = i.getCartesian(e[0].axisIndex, e[1].axisIndex)
                  , a = r.pointToData([t[0][0], t[1][0]], !0)
                  , o = r.pointToData([t[0][1], t[1][1]], !0);
                return [m([a[0], o[0]]), m([a[1], o[1]])]
            }
        }
        function a(t, e, i) {
            var n = e[i]
              , r = n.dataZoomModel;
            return r ? {
                dataZoomId: r.id,
                startValue: t[i][0],
                endValue: t[i][1]
            } : void 0
        }
        function o(t, e) {
            t.setIconStatus("back", d.count(e) > 1 ? E : B)
        }
        var s = t(si)
          , l = t("../../../util/number")
          , u = t("../../helper/SelectController")
          , c = t("zrender/core/BoundingRect")
          , h = t("zrender/container/Group")
          , d = t("../../dataZoom/history")
          , f = t("../../helper/interactionMutex")
          , p = s.each
          , m = l.asc;
        t("../../dataZoomSelect");
        var v = "\x00_ec_\x00toolbox-dataZoom_";
        e.defaultOption = {
            show: !0,
            icon: {
                zoom: "M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",
                back: "M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"
            },
            title: {
                zoom: "区域缩放",
                back: "区域缩放还原"
            }
        };
        var g = e[ii];
        g.render = function(t, e) {
            o(t, e)
        }
        ,
        g.onclick = function(t, e, i) {
            var n = this._controllerGroup;
            this._controllerGroup || (n = this._controllerGroup = new h,
            e.getZr().add(n)),
            y[i].call(this, n, this.model, t, e)
        }
        ,
        g[Ne] = function(t, e) {
            this._disposeController(),
            f.release("globalPan", e.getZr())
        }
        ,
        g[De] = function(t, e) {
            var i = e.getZr();
            f.release("globalPan", i),
            this._disposeController(),
            this._controllerGroup && i[Ne](this._controllerGroup)
        }
        ;
        var y = {
            zoom: function(t, e, i, n) {
                var r = this._isZoomActive = !this._isZoomActive
                  , a = n.getZr();
                f[r ? "take" : "release"]("globalPan", a),
                e.setIconStatus("zoom", r ? E : B),
                r ? (a.setDefaultCursorStyle("crosshair"),
                this._createController(t, e, i, n)) : (a.setDefaultCursorStyle("default"),
                this._disposeController())
            },
            back: function(t, e, i, n) {
                this._dispatchAction(d.pop(i), n)
            }
        };
        return g._createController = function(t, e, i, n) {
            var r = this._controller = new u("rect",n.getZr(),{
                lineWidth: 3,
                stroke: "#333",
                fill: "rgba(0,0,0,0.2)"
            });
            r.on("selectEnd", s.bind(this._onSelected, this, r, e, i, n)),
            r.enable(t, !1)
        }
        ,
        g._disposeController = function() {
            var t = this._controller;
            t && (t.off("selected"),
            t[De]())
        }
        ,
        g._onSelected = function(t, e, n, o, s) {
            if (s[Ve]) {
                var l = s[0];
                t[Fe]();
                var u = {};
                n[je]("grid", function(t) {
                    var e = t[de]
                      , o = i(e, n)
                      , s = r(l, o);
                    if (s) {
                        var c = a(s, o, 0, "x")
                          , h = a(s, o, 1, "y");
                        c && (u[c.dataZoomId] = c),
                        h && (u[h.dataZoomId] = h)
                    }
                }, this),
                d.push(n, u),
                this._dispatchAction(u, o)
            }
        }
        ,
        g._dispatchAction = function(t, e) {
            var i = [];
            p(t, function(t) {
                i.push(t)
            }),
            i[Ve] && e[Ee]({
                type: "dataZoom",
                from: this.uid,
                batch: s.clone(i, !0)
            })
        }
        ,
        t("../featureManager").register("dataZoom", e),
        t("../../../echarts").registerPreprocessor(function(t) {
            function e(t, e) {
                if (e) {
                    var r = t + "Index"
                      , a = e[r];
                    null == a || s[be](a) || (a = a === !1 ? [] : [a]),
                    i(t, function(e, i) {
                        if (null == a || -1 !== s[_e](a, i)) {
                            var o = {
                                type: "select",
                                $fromToolbox: !0,
                                id: v + t + i
                            };
                            o[r] = i,
                            n.push(o)
                        }
                    })
                }
            }
            function i(e, i) {
                var n = t[e];
                s[be](n) || (n = n ? [n] : []),
                p(n, i)
            }
            if (t) {
                var n = t.dataZoom || (t.dataZoom = []);
                s[be](n) || (n = [n]);
                var r = t.toolbox;
                if (r && (s[be](r) && (r = r[0]),
                r && r.feature)) {
                    var a = r.feature.dataZoom;
                    e("xAxis", a),
                    e("yAxis", a)
                }
            }
        }),
        e
    }),
    e("echarts/component/toolbox/feature/Restore", [li, "../../dataZoom/history", "../featureManager", "../../../echarts"], function(t) {
        function e(t) {
            this.model = t
        }
        var i = t("../../dataZoom/history");
        e.defaultOption = {
            show: !0,
            icon: "M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",
            title: "还原"
        };
        var n = e[ii];
        return n.onclick = function(t, e) {
            i.clear(t),
            e[Ee]({
                type: "restore",
                from: this.uid
            })
        }
        ,
        t("../featureManager").register("restore", e),
        t("../../../echarts").registerAction({
            type: "restore",
            event: "restore",
            update: "prepareAndUpdate"
        }, function(t, e) {
            e.resetOption("recreate")
        }),
        e
    }),
    e("echarts/component/toolbox/feature/DataView", [li, si, "zrender/core/event", "../featureManager", "../../../echarts"], function(t) {
        function e(t) {
            var e = {}
              , i = []
              , n = [];
            return t.eachRawSeries(function(t) {
                var r = t[de];
                if (!r || "cartesian2d" !== r.type && "polar" !== r.type)
                    i.push(t);
                else {
                    var a = r.getBaseAxis();
                    if (a.type === x) {
                        var o = a.dim + "_" + a.index;
                        e[o] || (e[o] = {
                            categoryAxis: a,
                            valueAxis: r.getOtherAxis(a),
                            series: []
                        },
                        n.push({
                            axisDim: a.dim,
                            axisIndex: a.index
                        })),
                        e[o][Ie].push(t)
                    } else
                        i.push(t)
                }
            }),
            {
                seriesGroupByCategoryAxis: e,
                other: i,
                meta: n
            }
        }
        function i(t) {
            var e = [];
            return f.each(t, function(t) {
                var i = t.categoryAxis
                  , n = t.valueAxis
                  , r = n.dim
                  , a = [" "][H](f.map(t[Ie], function(t) {
                    return t.name
                }))
                  , o = [i.model.getCategories()];
                f.each(t[Ie], function(t) {
                    o.push(t.getRawData()[h](r, function(t) {
                        return t
                    }))
                });
                for (var s = [a.join(v)], l = 0; l < o[0][Ve]; l++) {
                    for (var u = [], c = 0; c < o[Ve]; c++)
                        u.push(o[c][l]);
                    s.push(u.join(v))
                }
                e.push(s.join("\n"))
            }),
            e.join("\n\n" + m + "\n\n")
        }
        function n(t) {
            return f.map(t, function(t) {
                var e = t.getRawData()
                  , i = [t.name]
                  , n = [];
                return e.each(e[U], function() {
                    for (var t = arguments[Ve], r = arguments[t - 1], a = e[j](r), o = 0; t - 1 > o; o++)
                        n[o] = arguments[o];
                    i.push((a ? a + v : "") + n.join(v))
                }),
                i.join("\n")
            }).join("\n\n" + m + "\n\n")
        }
        function r(t) {
            var r = e(t);
            return {
                value: f[ri]([i(r.seriesGroupByCategoryAxis), n(r.other)], function(t) {
                    return t[we](/[\n\t\s]/g, "")
                }).join("\n\n" + m + "\n\n"),
                meta: r.meta
            }
        }
        function a(t) {
            return t[we](/^\s\s*/, "")[we](/\s\s*$/, "")
        }
        function o(t) {
            var e = t.slice(0, t[_e]("\n"));
            return e[_e](v) >= 0 ? !0 : void 0
        }
        function s(t) {
            for (var e = t.split(/\n+/g), i = a(e.shift()).split(g), n = [], r = f.map(i, function(t) {
                return {
                    name: t,
                    data: []
                }
            }), o = 0; o < e[Ve]; o++) {
                var s = a(e[o]).split(g);
                n.push(s.shift());
                for (var l = 0; l < s[Ve]; l++)
                    r[l] && (r[l].data[o] = s[l])
            }
            return {
                series: r,
                categories: n
            }
        }
        function l(t) {
            for (var e = t.split(/\n+/g), i = a(e.shift()), n = [], r = 0; r < e[Ve]; r++) {
                var o, s = a(e[r]).split(g), l = "", u = !1;
                isNaN(s[0]) ? (u = !0,
                l = s[0],
                s = s.slice(1),
                n[r] = {
                    name: l,
                    value: []
                },
                o = n[r].value) : o = n[r] = [];
                for (var c = 0; c < s[Ve]; c++)
                    o.push(+s[c]);
                1 === o[Ve] && (u ? n[r].value = o[0] : n[r] = o[0])
            }
            return {
                name: i,
                data: n
            }
        }
        function u(t, e) {
            var i = t.split(new RegExp("\n*" + m + "\n*","g"))
              , n = {
                series: []
            };
            return f.each(i, function(t, i) {
                if (o(t)) {
                    var r = s(t)
                      , a = e[i]
                      , u = a.axisDim + "Axis";
                    a && (n[u] = n[u] || [],
                    n[u][a.axisIndex] = {
                        data: r.categories
                    },
                    n[Ie] = n[Ie][H](r[Ie]))
                } else {
                    var r = l(t);
                    n[Ie].push(r)
                }
            }),
            n
        }
        function c(t) {
            this._dom = null,
            this.model = t
        }
        function d(t, e) {
            return f.map(t, function(t, i) {
                var n = e && e[i];
                return f[Ge](n) && !f[be](n) ? (f[Ge](t) && !f[be](t) && (t = t.value),
                f[Be]({
                    value: t
                }, n)) : t
            })
        }
        var f = t(si)
          , p = t("zrender/core/event")
          , m = new Array(60).join("-")
          , v = "	"
          , g = new RegExp("[" + v + "]+","g");
        return c.defaultOption = {
            show: !0,
            readOnly: !1,
            icon: "M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",
            title: "数据视图",
            lang: ["数据视图", "关闭", "刷新"],
            backgroundColor: "#fff",
            textColor: "#000",
            textareaColor: "#fff",
            textareaBorderColor: "#333",
            buttonColor: "#c23531",
            buttonTextColor: "#fff"
        },
        c[ii].onclick = function(t, e) {
            function i() {
                n.removeChild(o),
                x._dom = null
            }
            var n = e.getDom()
              , a = this.model;
            this._dom && n.removeChild(this._dom);
            var o = document[D]("div");
            o.style.cssText = "position:absolute;left:5px;top:5px;bottom:5px;right:5px;",
            o.style[Xe] = a.get(Xe) || "#fff";
            var s = document[D]("h4")
              , l = a.get("lang") || [];
            s.innerHTML = l[0] || a.get("title"),
            s.style.cssText = "margin: 10px 20px;",
            s.style.color = a.get("textColor");
            var c = document[D]("textarea");
            c.style.cssText = "display:block;width:100%;font-size:14px;line-height:1.6rem;font-family:Monaco,Consolas,Courier new,monospace",
            c.readOnly = a.get("readOnly"),
            c.style.color = a.get("textColor"),
            c.style.borderColor = a.get("textareaBorderColor"),
            c.style[Xe] = a.get("textareaColor");
            var h = r(t);
            c.value = h.value;
            var d = h.meta
              , f = document[D]("div");
            f.style.cssText = "position:absolute;bottom:0;left:0;right:0;";
            var m = "float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px"
              , g = document[D]("div")
              , y = document[D]("div");
            m += ";background-color:" + a.get("buttonColor"),
            m += ";color:" + a.get("buttonTextColor");
            var x = this;
            p.addEventListener(g, "click", i),
            p.addEventListener(y, "click", function() {
                var t;
                try {
                    t = u(c.value, d)
                } catch (n) {
                    throw i(),
                    new Error("Data view format error " + n)
                }
                e[Ee]({
                    type: "changeDataView",
                    newOption: t
                }),
                i()
            }),
            g.innerHTML = l[1],
            y.innerHTML = l[2],
            y.style.cssText = m,
            g.style.cssText = m,
            f.appendChild(y),
            f.appendChild(g),
            p.addEventListener(c, "keydown", function(t) {
                if (9 === (t.keyCode || t.which)) {
                    var e = this.value
                      , i = this.selectionStart
                      , n = this.selectionEnd;
                    this.value = e.substring(0, i) + v + e.substring(n),
                    this.selectionStart = this.selectionEnd = i + 1,
                    p.stop(t)
                }
            }),
            o.appendChild(s),
            o.appendChild(c),
            o.appendChild(f),
            c.style[He] = n.clientHeight - 80 + "px",
            n.appendChild(o),
            this._dom = o
        }
        ,
        c[ii][Ne] = function(t, e) {
            this._dom && e.getDom().removeChild(this._dom)
        }
        ,
        c[ii][De] = function(t, e) {
            this[Ne](t, e)
        }
        ,
        t("../featureManager").register("dataView", c),
        t("../../../echarts").registerAction({
            type: "changeDataView",
            event: "dataViewChanged",
            update: "prepareAndUpdate"
        }, function(t, e) {
            var i = [];
            f.each(t.newOption[Ie], function(t) {
                var n = e.getSeriesByName(t.name)[0];
                if (n) {
                    var r = n.get("data");
                    i.push({
                        name: t.name,
                        data: d(t.data, r)
                    })
                } else
                    i.push(f[Ze]({
                        type: "scatter"
                    }, t))
            }),
            e.mergeOption(f[Be]({
                series: i
            }, t.newOption))
        }),
        c
    }),
    e("echarts/scale/Scale", [li, "../util/clazz"], function(t) {
        function e() {
            this._extent = [1 / 0, -1 / 0],
            this._interval = 0,
            this.init && this.init.apply(this, arguments)
        }
        var i = t("../util/clazz")
          , n = e[ii];
        return n.parse = function(t) {
            return t
        }
        ,
        n[te] = function(t) {
            var e = this._extent;
            return t >= e[0] && t <= e[1]
        }
        ,
        n.normalize = function(t) {
            var e = this._extent;
            return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
        }
        ,
        n.scale = function(t) {
            var e = this._extent;
            return t * (e[1] - e[0]) + e[0]
        }
        ,
        n.unionExtent = function(t) {
            var e = this._extent;
            t[0] < e[0] && (e[0] = t[0]),
            t[1] > e[1] && (e[1] = t[1])
        }
        ,
        n[$] = function() {
            return this._extent.slice()
        }
        ,
        n.setExtent = function(t, e) {
            var i = this._extent;
            isNaN(t) || (i[0] = t),
            isNaN(e) || (i[1] = e)
        }
        ,
        n.getTicksLabels = function() {
            for (var t = [], e = this[Q](), i = 0; i < e[Ve]; i++)
                t.push(this[K](e[i]));
            return t
        }
        ,
        i.enableClassExtend(e),
        i.enableClassManagement(e, {
            registerWhenExtend: !0
        }),
        e
    }),
    e("echarts/model/Model", [li, si, "../util/clazz", "./mixin/lineStyle", "./mixin/areaStyle", "./mixin/textStyle", "./mixin/itemStyle"], function(t) {
        function e(t, e, i, n) {
            this.parentModel = e,
            this[q] = i,
            this[Ke] = t,
            this.init && (arguments[Ve] <= 4 ? this.init(t, e, i, n) : this.init.apply(this, arguments))
        }
        var i = t(si)
          , n = t("../util/clazz");
        e[ii] = {
            constructor: e,
            init: null,
            mergeOption: function(t) {
                i.merge(this[Ke], t, !0)
            },
            get: function(t, e) {
                if (!t)
                    return this[Ke];
                typeof t === ei && (t = t.split("."));
                for (var i = this[Ke], n = this.parentModel, r = 0; r < t[Ve] && (i = i && "object" == typeof i ? i[t[r]] : null,
                null != i); r++)
                    ;
                return null == i && n && !e && (i = n.get(t)),
                i
            },
            getShallow: function(t, e) {
                var i = this[Ke]
                  , n = i && i[t]
                  , r = this.parentModel;
                return null == n && r && !e && (n = r[V](t)),
                n
            },
            getModel: function(t, i) {
                var n = this.get(t, !0)
                  , r = this.parentModel
                  , a = new e(n,i || r && r[Qe](t),this[q]);
                return a
            },
            isEmpty: function() {
                return null == this[Ke]
            },
            restoreData: function() {},
            clone: function() {
                var t = this.constructor;
                return new t(i.clone(this[Ke]))
            },
            setReadOnly: function(t) {
                n.setReadOnly(this, t)
            }
        },
        n.enableClassExtend(e);
        var r = i.mixin;
        return r(e, t("./mixin/lineStyle")),
        r(e, t("./mixin/areaStyle")),
        r(e, t("./mixin/textStyle")),
        r(e, t("./mixin/itemStyle")),
        e
    }),
    e("echarts/util/model", [li, "./format", "./number", si, "../model/Model"], function(t) {
        function e(t) {
            return t && t.id && 0 === (t.id + "")[_e]("\x00_ec_\x00")
        }
        var i = t("./format")
          , n = t("./number")
          , r = t(si)
          , a = t("../model/Model")
          , o = ["x", "y", "z", d, "angle"]
          , s = {};
        return s.createNameEach = function(t, e) {
            t = t.slice();
            var i = r.map(t, s.capitalFirst);
            e = (e || []).slice();
            var n = r.map(e, s.capitalFirst);
            return function(a, o) {
                r.each(t, function(t, r) {
                    for (var s = {
                        name: t,
                        capital: i[r]
                    }, l = 0; l < e[Ve]; l++)
                        s[e[l]] = t + n[l];
                    a.call(o, s)
                })
            }
        }
        ,
        s.capitalFirst = function(t) {
            return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
        }
        ,
        s.eachAxisDim = s.createNameEach(o, ["axisIndex", "axis", "index"]),
        s.normalizeToArray = function(t) {
            return r[be](t) ? t : null == t ? [] : [t]
        }
        ,
        s.createLinkedNodesFinder = function(t, e, i) {
            function n(t, e) {
                return r[_e](e.nodes, t) >= 0
            }
            function a(t, n) {
                var a = !1;
                return e(function(e) {
                    r.each(i(t, e) || [], function(t) {
                        n.records[e.name][t] && (a = !0)
                    })
                }),
                a
            }
            function o(t, n) {
                n.nodes.push(t),
                e(function(e) {
                    r.each(i(t, e) || [], function(t) {
                        n.records[e.name][t] = !0
                    })
                })
            }
            return function(i) {
                function r(t) {
                    !n(t, s) && a(t, s) && (o(t, s),
                    l = !0)
                }
                var s = {
                    nodes: [],
                    records: {}
                };
                if (e(function(t) {
                    s.records[t.name] = {}
                }),
                !i)
                    return s;
                o(i, s);
                var l;
                do
                    l = !1,
                    t(r);
                while (l);return s
            }
        }
        ,
        s.defaultEmphasis = function(t, e) {
            if (t) {
                var i = t[E] = t[E] || {}
                  , n = t[B] = t[B] || {};
                r.each(e, function(t) {
                    var e = r.retrieve(i[t], n[t]);
                    null != e && (i[t] = e)
                })
            }
        }
        ,
        s.createDataFormatModel = function(t, e, i) {
            var n = new a;
            return r.mixin(n, s.dataFormatMixin),
            n[Te] = t[Te],
            n.name = t.name || "",
            n[Pe] = function() {
                return e
            }
            ,
            n.getRawDataArray = function() {
                return i
            }
            ,
            n
        }
        ,
        s.getDataItemValue = function(t) {
            return t && (null == t.value ? t : t.value)
        }
        ,
        s.converDataValue = function(t, e) {
            var i = e && e.type;
            return i === y ? t : ("time" !== i || isFinite(t) || null == t || "-" === t || (t = +n.parseDate(t)),
            null == t || "" === t ? 0 / 0 : +t)
        }
        ,
        s.dataFormatMixin = {
            getDataParams: function(t) {
                var e = this[Pe]()
                  , i = this[Te]
                  , n = this.name
                  , r = this[X](t)
                  , a = e.getRawIndex(t)
                  , o = e[j](t, !0)
                  , s = this.getRawDataArray()
                  , l = s && s[a];
                return {
                    seriesIndex: i,
                    seriesName: n,
                    name: o,
                    dataIndex: a,
                    data: l,
                    value: r,
                    $vars: ["seriesName", "name", "value"]
                }
            },
            getFormattedLabel: function(t, e, n) {
                e = e || B;
                var r = this[Pe]()
                  , a = r[T](t)
                  , o = this[Ce](t);
                return n || (n = a.get(["label", e, "formatter"])),
                typeof n === xe ? (o.status = e,
                n(o)) : typeof n === ei ? i.formatTpl(n, o) : void 0
            },
            getRawValue: function(t) {
                var e = this[Pe]()[T](t);
                if (e && null != e[Ke]) {
                    var i = e[Ke];
                    return r[Ge](i) && !r[be](i) ? i.value : i
                }
            }
        },
        s.mappingToExists = function(t, i) {
            i = (i || []).slice();
            var n = r.map(t || [], function(t) {
                return {
                    exist: t
                }
            });
            return r.each(i, function(t, a) {
                if (r[Ge](t))
                    for (var o = 0; o < n[Ve]; o++) {
                        var s = n[o].exist;
                        if (!n[o][Ke] && (null != t.id && s.id === t.id + "" || null != t.name && !e(t) && !e(s) && s.name === t.name + "")) {
                            n[o][Ke] = t,
                            i[a] = null;
                            break
                        }
                    }
            }),
            r.each(i, function(t) {
                if (r[Ge](t)) {
                    for (var i = 0; i < n[Ve]; i++) {
                        var a = n[i].exist;
                        if (!n[i][Ke] && !e(a) && null == t.id) {
                            n[i][Ke] = t;
                            break
                        }
                    }
                    i >= n[Ve] && n.push({
                        option: t
                    })
                }
            }),
            n
        }
        ,
        s
    }),
    e("echarts/model/globalDefault", [], function() {
        var t = "";
        return typeof navigator !== L && (t = navigator.platform || ""),
        {
            color: ["#c23531", "#314656", "#61a0a8", "#dd8668", "#91c7ae", "#6e7074", "#ca8622", "#bda29a", "#44525d", "#c4ccd3"],
            grid: {},
            textStyle: {
                fontFamily: t.match(/^Win/) ? "Microsoft YaHei" : "sans-serif",
                fontSize: 12,
                fontStyle: "normal",
                fontWeight: "normal"
            },
            animation: !0,
            animationThreshold: 2e3,
            animationDuration: 1e3,
            animationDurationUpdate: 300,
            animationEasing: "exponentialOut",
            animationEasingUpdate: "cubicOut"
        }
    }),
    e("zrender/tool/path", [li, "../graphic/Path", "../core/PathProxy", "./transformPath", "../core/matrix"], function(t) {
        function e(t, e, i, n, r, a, o, s, l, u, p) {
            var g = l * (f / 180)
              , y = d(g) * (t - i) / 2 + h(g) * (e - n) / 2
              , x = -1 * h(g) * (t - i) / 2 + d(g) * (e - n) / 2
              , _ = y * y / (o * o) + x * x / (s * s);
            _ > 1 && (o *= c(_),
            s *= c(_));
            var b = (r === a ? -1 : 1) * c((o * o * s * s - o * o * x * x - s * s * y * y) / (o * o * x * x + s * s * y * y)) || 0
              , w = b * o * x / s
              , M = b * -s * y / o
              , S = (t + i) / 2 + d(g) * w - h(g) * M
              , C = (e + n) / 2 + h(g) * w + d(g) * M
              , T = v([1, 0], [(y - w) / o, (x - M) / s])
              , A = [(y - w) / o, (x - M) / s]
              , z = [(-1 * y - w) / o, (-1 * x - M) / s]
              , L = v(A, z);
            m(A, z) <= -1 && (L = f),
            m(A, z) >= 1 && (L = 0),
            0 === a && L > 0 && (L -= 2 * f),
            1 === a && 0 > L && (L += 2 * f),
            p.addData(u, S, C, o, s, T, L, g, a)
        }
        function n(t) {
            if (!t)
                return [];
            var i, n = t[we](/-/g, " -")[we](/  /g, " ")[we](/ /g, ",")[we](/,,/g, ",");
            for (i = 0; i < u[Ve]; i++)
                n = n[we](new RegExp(u[i],"g"), "|" + u[i]);
            var r, a = n.split("|"), s = 0, l = 0, c = new o, h = o.CMD;
            for (i = 1; i < a[Ve]; i++) {
                var d, f = a[i], p = f.charAt(0), m = 0, v = f.slice(1)[we](/e,-/g, "e-").split(",");
                v[Ve] > 0 && "" === v[0] && v.shift();
                for (var g = 0; g < v[Ve]; g++)
                    v[g] = parseFloat(v[g]);
                for (; m < v[Ve] && !isNaN(v[m]) && !isNaN(v[0]); ) {
                    var y, x, _, b, w, M, S, C = s, T = l;
                    switch (p) {
                    case "l":
                        s += v[m++],
                        l += v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "L":
                        s = v[m++],
                        l = v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "m":
                        s += v[m++],
                        l += v[m++],
                        d = h.M,
                        c.addData(d, s, l),
                        p = "l";
                        break;
                    case "M":
                        s = v[m++],
                        l = v[m++],
                        d = h.M,
                        c.addData(d, s, l),
                        p = "L";
                        break;
                    case "h":
                        s += v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "H":
                        s = v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "v":
                        l += v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "V":
                        l = v[m++],
                        d = h.L,
                        c.addData(d, s, l);
                        break;
                    case "C":
                        d = h.C,
                        c.addData(d, v[m++], v[m++], v[m++], v[m++], v[m++], v[m++]),
                        s = v[m - 2],
                        l = v[m - 1];
                        break;
                    case "c":
                        d = h.C,
                        c.addData(d, v[m++] + s, v[m++] + l, v[m++] + s, v[m++] + l, v[m++] + s, v[m++] + l),
                        s += v[m - 2],
                        l += v[m - 1];
                        break;
                    case "S":
                        y = s,
                        x = l;
                        var A = c.len()
                          , z = c.data;
                        r === h.C && (y += s - z[A - 4],
                        x += l - z[A - 3]),
                        d = h.C,
                        C = v[m++],
                        T = v[m++],
                        s = v[m++],
                        l = v[m++],
                        c.addData(d, y, x, C, T, s, l);
                        break;
                    case "s":
                        y = s,
                        x = l;
                        var A = c.len()
                          , z = c.data;
                        r === h.C && (y += s - z[A - 4],
                        x += l - z[A - 3]),
                        d = h.C,
                        C = s + v[m++],
                        T = l + v[m++],
                        s += v[m++],
                        l += v[m++],
                        c.addData(d, y, x, C, T, s, l);
                        break;
                    case "Q":
                        C = v[m++],
                        T = v[m++],
                        s = v[m++],
                        l = v[m++],
                        d = h.Q,
                        c.addData(d, C, T, s, l);
                        break;
                    case "q":
                        C = v[m++] + s,
                        T = v[m++] + l,
                        s += v[m++],
                        l += v[m++],
                        d = h.Q,
                        c.addData(d, C, T, s, l);
                        break;
                    case "T":
                        y = s,
                        x = l;
                        var A = c.len()
                          , z = c.data;
                        r === h.Q && (y += s - z[A - 4],
                        x += l - z[A - 3]),
                        s = v[m++],
                        l = v[m++],
                        d = h.Q,
                        c.addData(d, y, x, s, l);
                        break;
                    case "t":
                        y = s,
                        x = l;
                        var A = c.len()
                          , z = c.data;
                        r === h.Q && (y += s - z[A - 4],
                        x += l - z[A - 3]),
                        s += v[m++],
                        l += v[m++],
                        d = h.Q,
                        c.addData(d, y, x, s, l);
                        break;
                    case "A":
                        _ = v[m++],
                        b = v[m++],
                        w = v[m++],
                        M = v[m++],
                        S = v[m++],
                        C = s,
                        T = l,
                        s = v[m++],
                        l = v[m++],
                        d = h.A,
                        e(C, T, s, l, M, S, _, b, w, d, c);
                        break;
                    case "a":
                        _ = v[m++],
                        b = v[m++],
                        w = v[m++],
                        M = v[m++],
                        S = v[m++],
                        C = s,
                        T = l,
                        s += v[m++],
                        l += v[m++],
                        d = h.A,
                        e(C, T, s, l, M, S, _, b, w, d, c)
                    }
                }
                ("z" === p || "Z" === p) && (d = h.Z,
                c.addData(d)),
                r = d
            }
            return c.toStatic(),
            c
        }
        function r(t, e) {
            var r, a = n(t);
            return e = e || {},
            e[i] = function(t) {
                t.setData(a.data),
                r && s(t, r);
                var e = t[P]();
                e && t.rebuildPath(e)
            }
            ,
            e[F] = function(t) {
                r || (r = l[J]()),
                l.mul(r, t, r)
            }
            ,
            e
        }
        var a = t("../graphic/Path")
          , o = t("../core/PathProxy")
          , s = t("./transformPath")
          , l = t("../core/matrix")
          , u = ["m", "M", "l", "L", "v", "V", "h", "H", "z", "Z", "c", "C", "q", "Q", "t", "T", "s", "S", "a", "A"]
          , c = Math.sqrt
          , h = Math.sin
          , d = Math.cos
          , f = Math.PI
          , p = function(t) {
            return Math.sqrt(t[0] * t[0] + t[1] * t[1])
        }
          , m = function(t, e) {
            return (t[0] * e[0] + t[1] * e[1]) / (p(t) * p(e))
        }
          , v = function(t, e) {
            return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(m(t, e))
        };
        return {
            createFromString: function(t, e) {
                return new a(r(t, e))
            },
            extendFromString: function(t, e) {
                return a[Ze](r(t, e))
            },
            mergePath: function(t, e) {
                var n, r, o = [], s = t[Ve];
                for (r = 0; s > r; r++)
                    n = t[r],
                    n.__dirty && n[i](n.path, n.shape),
                    o.push(n.path);
                var l = new a(e);
                return l[i] = function(t) {
                    t.appendPath(o);
                    var e = t[P]();
                    e && t.rebuildPath(e)
                }
                ,
                l
            }
        }
    }),
    e("zrender/graphic/Path", [li, "./Displayable", k, "../core/PathProxy", "../contain/path", "./Gradient"], function(t) {
        function e(t) {
            var e = t.fill;
            return null != e && "none" !== e
        }
        function n(t) {
            var e = t[N];
            return null != e && "none" !== e && t[G] > 0
        }
        function r(t) {
            a.call(this, t),
            this.path = new s
        }
        var a = t("./Displayable")
          , o = t(k)
          , s = t("../core/PathProxy")
          , l = t("../contain/path")
          , u = t("./Gradient")
          , c = Math.abs;
        return r[ii] = {
            constructor: r,
            type: "path",
            __dirtyPath: !0,
            strokeContainThreshold: 5,
            brush: function(t) {
                t.save();
                var r = this.style
                  , a = this.path
                  , o = n(r)
                  , s = e(r);
                this.__dirtyPath && (s && r.fill instanceof u && r.fill.updateCanvasGradient(this, t),
                o && r[N]instanceof u && r[N].updateCanvasGradient(this, t)),
                r.bind(t, this),
                this.setTransform(t);
                var l = r.lineDash
                  , c = r.lineDashOffset
                  , h = !!t.setLineDash;
                this.__dirtyPath || l && !h && o ? (a = this.path.beginPath(t),
                l && !h && (a.setLineDash(l),
                a.setLineDashOffset(c)),
                this[i](a, this.shape),
                this.__dirtyPath = !1) : (t.beginPath(),
                this.path.rebuildPath(t)),
                s && a.fill(t),
                l && h && (t.setLineDash(l),
                t.lineDashOffset = c),
                o && a[N](t),
                null != r.text && this.drawRectText(t, this[se]()),
                t.restore()
            },
            buildPath: function() {},
            getBoundingRect: function() {
                var t = this._rect
                  , r = this.style;
                if (!t) {
                    var a = this.path;
                    this.__dirtyPath && (a.beginPath(),
                    this[i](a, this.shape)),
                    t = a[se]()
                }
                if (n(r) && (this.__dirty || !this._rect)) {
                    var o = this._rectWithStroke || (this._rectWithStroke = t.clone());
                    o.copy(t);
                    var s = r[G]
                      , l = r.strokeNoScale ? this.getLineScale() : 1;
                    return e(r) || (s = Math.max(s, this.strokeContainThreshold)),
                    l > 1e-10 && (o.width += s / l,
                    o[He] += s / l,
                    o.x -= s / l / 2,
                    o.y -= s / l / 2),
                    o
                }
                return this._rect = t,
                t
            },
            contain: function(t, i) {
                var r = this.transformCoordToLocal(t, i)
                  , a = this[se]()
                  , o = this.style;
                if (t = r[0],
                i = r[1],
                a[te](t, i)) {
                    var s = this.path.data;
                    if (n(o)) {
                        var u = o[G]
                          , c = o.strokeNoScale ? this.getLineScale() : 1;
                        if (c > 1e-10 && (e(o) || (u = Math.max(u, this.strokeContainThreshold)),
                        l.containStroke(s, u / c, t, i)))
                            return !0
                    }
                    if (e(o))
                        return l[te](s, t, i)
                }
                return !1
            },
            dirty: function(t) {
                0 === arguments[Ve] && (t = !0),
                t && (this.__dirtyPath = t,
                this._rect = null),
                this.__dirty = !0,
                this.__zr && this.__zr.refresh(),
                this.__clipTarget && this.__clipTarget.dirty()
            },
            animateShape: function(t) {
                return this.animate("shape", t)
            },
            attrKV: function(t, e) {
                "shape" === t ? this[z](e) : a[ii].attrKV.call(this, t, e)
            },
            setShape: function(t, e) {
                var i = this.shape;
                if (i) {
                    if (o[Ge](t))
                        for (var n in t)
                            i[n] = t[n];
                    else
                        i[t] = e;
                    this.dirty(!0)
                }
                return this
            },
            getLineScale: function() {
                var t = this[ai];
                return t && c(t[0] - 1) > 1e-10 && c(t[3] - 1) > 1e-10 ? Math.sqrt(c(t[0] * t[3] - t[2] * t[1])) : 1
            }
        },
        r[Ze] = function(t) {
            var e = function(e) {
                r.call(this, e),
                t.style && this.style.extendFrom(t.style, !1);
                var i = t.shape;
                if (i) {
                    this.shape = this.shape || {};
                    var n = this.shape;
                    for (var a in i)
                        !n.hasOwnProperty(a) && i.hasOwnProperty(a) && (n[a] = i[a])
                }
                t.init && t.init.call(this, e)
            };
            o[ve](e, r);
            for (var i in t)
                "style" !== i && "shape" !== i && (e[ii][i] = t[i]);
            return e
        }
        ,
        o[ve](r, a),
        r
    }),
    e("zrender/graphic/Gradient", [li], function() {
        var t = function(t) {
            this.colorStops = t || []
        };
        return t[ii] = {
            constructor: t,
            addColorStop: function(t, e) {
                this.colorStops.push({
                    offset: t,
                    color: e
                })
            }
        },
        t
    }),
    e("zrender/container/Group", [li, k, "../Element", "../core/BoundingRect"], function(t) {
        var e = t(k)
          , i = t("../Element")
          , n = t("../core/BoundingRect")
          , r = function(t) {
            t = t || {},
            i.call(this, t);
            for (var e in t)
                this[e] = t[e];
            this._children = [],
            this.__storage = null,
            this.__dirty = !0
        };
        return r[ii] = {
            constructor: r,
            type: "group",
            children: function() {
                return this._children.slice()
            },
            childAt: function(t) {
                return this._children[t]
            },
            childOfName: function(t) {
                for (var e = this._children, i = 0; i < e[Ve]; i++)
                    if (e[i].name === t)
                        return e[i]
            },
            childCount: function() {
                return this._children[Ve]
            },
            add: function(t) {
                return t && t !== this && t[R] !== this && (this._children.push(t),
                this._doAdd(t)),
                this
            },
            addBefore: function(t, e) {
                if (t && t !== this && t[R] !== this && e && e[R] === this) {
                    var i = this._children
                      , n = i[_e](e);
                    n >= 0 && (i.splice(n, 0, t),
                    this._doAdd(t))
                }
                return this
            },
            _doAdd: function(t) {
                t[R] && t[R][Ne](t),
                t[R] = this;
                var e = this.__storage
                  , i = this.__zr;
                e && e !== t.__storage && (e.addToMap(t),
                t instanceof r && t.addChildrenToStorage(e)),
                i && i.refresh()
            },
            remove: function(t) {
                var i = this.__zr
                  , n = this.__storage
                  , a = this._children
                  , o = e[_e](a, t);
                return 0 > o ? this : (a.splice(o, 1),
                t[R] = null,
                n && (n.delFromMap(t.id),
                t instanceof r && t.delChildrenFromStorage(n)),
                i && i.refresh(),
                this)
            },
            removeAll: function() {
                var t, e, i = this._children, n = this.__storage;
                for (e = 0; e < i[Ve]; e++)
                    t = i[e],
                    n && (n.delFromMap(t.id),
                    t instanceof r && t.delChildrenFromStorage(n)),
                    t[R] = null;
                return i[Ve] = 0,
                this
            },
            eachChild: function(t, e) {
                for (var i = this._children, n = 0; n < i[Ve]; n++) {
                    var r = i[n];
                    t.call(e, r, n)
                }
                return this
            },
            traverse: function(t, e) {
                for (var i = 0; i < this._children[Ve]; i++) {
                    var n = this._children[i];
                    t.call(e, n),
                    "group" === n.type && n[Me](t, e)
                }
                return this
            },
            addChildrenToStorage: function(t) {
                for (var e = 0; e < this._children[Ve]; e++) {
                    var i = this._children[e];
                    t.addToMap(i),
                    i instanceof r && i.addChildrenToStorage(t)
                }
            },
            delChildrenFromStorage: function(t) {
                for (var e = 0; e < this._children[Ve]; e++) {
                    var i = this._children[e];
                    t.delFromMap(i.id),
                    i instanceof r && i.delChildrenFromStorage(t)
                }
            },
            dirty: function() {
                return this.__dirty = !0,
                this.__zr && this.__zr.refresh(),
                this
            },
            getBoundingRect: function(t) {
                for (var e = null, i = new n(0,0,0,0), r = t || this._children, a = [], o = 0; o < r[Ve]; o++) {
                    var s = r[o];
                    if (!s[qe] && !s.invisible) {
                        var l = s[se]()
                          , u = s.getLocalTransform(a);
                        u ? (i.copy(l),
                        i[F](u),
                        e = e || i.clone(),
                        e.union(i)) : (e = e || l.clone(),
                        e.union(l))
                    }
                }
                return e || i
            }
        },
        e[ve](r, i),
        r
    }),
    e("zrender/graphic/Image", [li, "./Displayable", "../core/BoundingRect", k, "./helper/roundRect", "../core/LRU"], function(t) {
        var e = t("./Displayable")
          , n = t("../core/BoundingRect")
          , r = t(k)
          , a = t("./helper/roundRect")
          , o = t("../core/LRU")
          , s = new o(50)
          , l = function(t) {
            e.call(this, t)
        };
        return l[ii] = {
            constructor: l,
            type: "image",
            brush: function(t) {
                var e, n = this.style, r = n.image;
                if (e = typeof r === ei ? this._image : r,
                !e && r) {
                    var o = s.get(r);
                    if (!o)
                        return e = new Image,
                        e.onload = function() {
                            e.onload = null;
                            for (var t = 0; t < o.pending[Ve]; t++)
                                o.pending[t].dirty()
                        }
                        ,
                        o = {
                            image: e,
                            pending: [this]
                        },
                        e.src = r,
                        s.put(r, o),
                        void (this._image = e);
                    if (e = o.image,
                    this._image = e,
                    !e.width || !e[He])
                        return void o.pending.push(this)
                }
                if (e) {
                    var l = n.width || e.width
                      , u = n[He] || e[He]
                      , c = n.x || 0
                      , h = n.y || 0;
                    if (!e.width || !e[He])
                        return;
                    if (t.save(),
                    n.bind(t),
                    this.setTransform(t),
                    n.r && (t.beginPath(),
                    a[i](t, n),
                    t.clip()),
                    n.sWidth && n.sHeight) {
                        var d = n.sx || 0
                          , f = n.sy || 0;
                        t.drawImage(e, d, f, n.sWidth, n.sHeight, c, h, l, u)
                    } else if (n.sx && n.sy) {
                        var d = n.sx
                          , f = n.sy
                          , p = l - d
                          , m = u - f;
                        t.drawImage(e, d, f, p, m, c, h, l, u)
                    } else
                        t.drawImage(e, c, h, l, u);
                    null == n.width && (n.width = l),
                    null == n[He] && (n[He] = u),
                    null != n.text && this.drawRectText(t, this[se]()),
                    t.restore()
                }
            },
            getBoundingRect: function() {
                var t = this.style;
                return this._rect || (this._rect = new n(t.x || 0,t.y || 0,t.width || 0,t[He] || 0)),
                this._rect
            }
        },
        r[ve](l, e),
        l
    }),
    e("zrender/graphic/Text", [li, "./Displayable", k, "../contain/text"], function(t) {
        var e = t("./Displayable")
          , i = t(k)
          , n = t("../contain/text")
          , r = function(t) {
            e.call(this, t)
        };
        return r[ii] = {
            constructor: r,
            type: "text",
            brush: function(t) {
                var e = this.style
                  , i = e.x || 0
                  , r = e.y || 0
                  , a = e.text
                  , o = e.fill
                  , s = e[N];
                if (null != a && (a += ""),
                a) {
                    t.save(),
                    this.style.bind(t),
                    this.setTransform(t),
                    o && (t.fillStyle = o),
                    s && (t.strokeStyle = s),
                    t.font = e.textFont || e.font,
                    t[ce] = e[ce],
                    t.textBaseline = e.textBaseline;
                    for (var l = n.measureText("国", t.font).width, u = a.split("\n"), c = 0; c < u[Ve]; c++)
                        o && t.fillText(u[c], i, r),
                        s && t.strokeText(u[c], i, r),
                        r += l;
                    t.restore()
                }
            },
            getBoundingRect: function() {
                if (!this._rect) {
                    var t = this.style
                      , e = n[se](t.text + "", t.textFont, t[ce], t.textBaseline);
                    e.x += t.x || 0,
                    e.y += t.y || 0,
                    this._rect = e
                }
                return this._rect
            }
        },
        i[ve](r, e),
        r
    }),
    e("zrender/graphic/shape/Sector", [li, "../Path"], function(t) {
        return t("../Path")[Ze]({
            type: "sector",
            shape: {
                cx: 0,
                cy: 0,
                r0: 0,
                r: 0,
                startAngle: 0,
                endAngle: 2 * Math.PI,
                clockwise: !0
            },
            buildPath: function(t, e) {
                var i = e.cx
                  , n = e.cy
                  , r = Math.max(e.r0 || 0, 0)
                  , a = Math.max(e.r, 0)
                  , o = e.startAngle
                  , s = e.endAngle
                  , l = e.clockwise
                  , u = Math.cos(o)
                  , c = Math.sin(o);
                t.moveTo(u * r + i, c * r + n),
                t.lineTo(u * a + i, c * a + n),
                t.arc(i, n, a, o, s, !l),
                t.lineTo(Math.cos(s) * r + i, Math.sin(s) * r + n),
                0 !== r && t.arc(i, n, r, s, o, l),
                t.closePath()
            }
        })
    }),
    e("zrender/graphic/shape/Polygon", [li, "../helper/poly", "../Path"], function(t) {
        var e = t("../helper/poly");
        return t("../Path")[Ze]({
            type: "polygon",
            shape: {
                points: null,
                smooth: !1,
                smoothConstraint: null
            },
            buildPath: function(t, n) {
                e[i](t, n, !0)
            }
        })
    }),
    e("zrender/graphic/shape/Circle", [li, "../Path"], function(t) {
        return t("../Path")[Ze]({
            type: "circle",
            shape: {
                cx: 0,
                cy: 0,
                r: 0
            },
            buildPath: function(t, e) {
                t.moveTo(e.cx + e.r, e.cy),
                t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
            }
        })
    }),
    e("zrender/graphic/shape/Polyline", [li, "../helper/poly", "../Path"], function(t) {
        var e = t("../helper/poly");
        return t("../Path")[Ze]({
            type: "polyline",
            shape: {
                points: null,
                smooth: !1,
                smoothConstraint: null
            },
            style: {
                stroke: "#000",
                fill: null
            },
            buildPath: function(t, n) {
                e[i](t, n, !1)
            }
        })
    }),
    e("zrender/graphic/shape/Rect", [li, "../helper/roundRect", "../Path"], function(t) {
        var e = t("../helper/roundRect");
        return t("../Path")[Ze]({
            type: "rect",
            shape: {
                r: 0,
                x: 0,
                y: 0,
                width: 0,
                height: 0
            },
            buildPath: function(t, n) {
                var r = n.x
                  , a = n.y
                  , o = n.width
                  , s = n[He];
                n.r ? e[i](t, n) : t.rect(r, a, o, s),
                t.closePath()
            }
        })
    }),
    e("zrender/graphic/shape/BezierCurve", [li, "../../core/curve", "../Path"], function(t) {
        var e = t("../../core/curve")
          , i = e.quadraticSubdivide
          , n = e.cubicSubdivide
          , r = e.quadraticAt
          , a = e.cubicAt
          , o = [];
        return t("../Path")[Ze]({
            type: "bezier-curve",
            shape: {
                x1: 0,
                y1: 0,
                x2: 0,
                y2: 0,
                cpx1: 0,
                cpy1: 0,
                percent: 1
            },
            style: {
                stroke: "#000",
                fill: null
            },
            buildPath: function(t, e) {
                var r = e.x1
                  , a = e.y1
                  , s = e.x2
                  , l = e.y2
                  , u = e.cpx1
                  , c = e.cpy1
                  , h = e.cpx2
                  , d = e.cpy2
                  , f = e.percent;
                0 !== f && (t.moveTo(r, a),
                null == h || null == d ? (1 > f && (i(r, u, s, f, o),
                u = o[1],
                s = o[2],
                i(a, c, l, f, o),
                c = o[1],
                l = o[2]),
                t.quadraticCurveTo(u, c, s, l)) : (1 > f && (n(r, u, h, s, f, o),
                u = o[1],
                h = o[2],
                s = o[3],
                n(a, c, d, l, f, o),
                c = o[1],
                d = o[2],
                l = o[3]),
                t.bezierCurveTo(u, c, h, d, s, l)))
            },
            pointAt: function(t) {
                var e = this.shape
                  , i = e.cpx2
                  , n = e.cpy2;
                return null === i || null === n ? [r(e.x1, e.cpx1, e.x2, t), r(e.y1, e.cpy1, e.y2, t)] : [a(e.x1, e.cpx1, e.cpx1, e.x2, t), a(e.y1, e.cpy1, e.cpy1, e.y2, t)]
            }
        })
    }),
    e("zrender/graphic/shape/Line", [li, "../Path"], function(t) {
        return t("../Path")[Ze]({
            type: "line",
            shape: {
                x1: 0,
                y1: 0,
                x2: 0,
                y2: 0,
                percent: 1
            },
            style: {
                stroke: "#000",
                fill: null
            },
            buildPath: function(t, e) {
                var i = e.x1
                  , n = e.y1
                  , r = e.x2
                  , a = e.y2
                  , o = e.percent;
                0 !== o && (t.moveTo(i, n),
                1 > o && (r = i * (1 - o) + r * o,
                a = n * (1 - o) + a * o),
                t.lineTo(r, a))
            },
            pointAt: function(t) {
                var e = this.shape;
                return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
            }
        })
    }),
    e("zrender/graphic/LinearGradient", [li, k, "./Gradient"], function(t) {
        var e = t(k)
          , i = t("./Gradient")
          , n = function(t, e, n, r, a) {
            this.x = null == t ? 0 : t,
            this.y = null == e ? 0 : e,
            this.x2 = null == n ? 1 : n,
            this.y2 = null == r ? 0 : r,
            i.call(this, a)
        };
        return n[ii] = {
            constructor: n,
            type: "linear",
            updateCanvasGradient: function(t, e) {
                for (var i = t[se](), n = this.x * i.width + i.x, r = this.x2 * i.width + i.x, a = this.y * i[He] + i.y, o = this.y2 * i[He] + i.y, s = e.createLinearGradient(n, a, r, o), l = this.colorStops, u = 0; u < l[Ve]; u++)
                    s.addColorStop(l[u].offset, l[u].color);
                this.canvasGradient = s
            }
        },
        e[ve](n, i),
        n
    }),
    e("zrender/graphic/shape/Arc", [li, "../Path"], function(t) {
        return t("../Path")[Ze]({
            type: "arc",
            shape: {
                cx: 0,
                cy: 0,
                r: 0,
                startAngle: 0,
                endAngle: 2 * Math.PI,
                clockwise: !0
            },
            style: {
                stroke: "#000",
                fill: null
            },
            buildPath: function(t, e) {
                var i = e.cx
                  , n = e.cy
                  , r = Math.max(e.r, 0)
                  , a = e.startAngle
                  , o = e.endAngle
                  , s = e.clockwise
                  , l = Math.cos(a)
                  , u = Math.sin(a);
                t.moveTo(l * r + i, u * r + n),
                t.arc(i, n, r, a, o, !s)
            }
        })
    }),
    e("zrender/graphic/RadialGradient", [li, k, "./Gradient"], function(t) {
        var e = t(k)
          , i = t("./Gradient")
          , n = function(t, e, n, r) {
            this.x = null == t ? .5 : t,
            this.y = null == e ? .5 : e,
            this.r = null == n ? .5 : n,
            i.call(this, r)
        };
        return n[ii] = {
            constructor: n,
            type: "radial",
            updateCanvasGradient: function(t, e) {
                for (var i = t[se](), n = i.width, r = i[He], a = Math.min(n, r), o = this.x * n + i.x, s = this.y * r + i.y, l = this.r * a, u = e.createRadialGradient(o, s, 0, o, s, l), c = this.colorStops, h = 0; h < c[Ve]; h++)
                    u.addColorStop(c[h].offset, c[h].color);
                this.canvasGradient = u
            }
        },
        e[ve](n, i),
        n
    }),
    e("zrender/core/BoundingRect", [li, "./vector", "./matrix"], function(t) {
        function e(t, e, i, n) {
            this.x = t,
            this.y = e,
            this.width = i,
            this[He] = n
        }
        var i = t("./vector")
          , n = t("./matrix")
          , r = i[F]
          , a = Math.min
          , o = Math.abs
          , s = Math.max;
        return e[ii] = {
            constructor: e,
            union: function(t) {
                var e = a(t.x, this.x)
                  , i = a(t.y, this.y);
                this.width = s(t.x + t.width, this.x + this.width) - e,
                this[He] = s(t.y + t[He], this.y + this[He]) - i,
                this.x = e,
                this.y = i
            },
            applyTransform: function() {
                var t = []
                  , e = [];
                return function(i) {
                    i && (t[0] = this.x,
                    t[1] = this.y,
                    e[0] = this.x + this.width,
                    e[1] = this.y + this[He],
                    r(t, t, i),
                    r(e, e, i),
                    this.x = a(t[0], e[0]),
                    this.y = a(t[1], e[1]),
                    this.width = o(e[0] - t[0]),
                    this[He] = o(e[1] - t[1]))
                }
            }(),
            calculateTransform: function(t) {
                var e = this
                  , i = t.width / e.width
                  , r = t[He] / e[He]
                  , a = n[J]();
                return n.translate(a, a, [-e.x, -e.y]),
                n.scale(a, a, [i, r]),
                n.translate(a, a, [t.x, t.y]),
                a
            },
            intersect: function(t) {
                var e = this
                  , i = e.x
                  , n = e.x + e.width
                  , r = e.y
                  , a = e.y + e[He]
                  , o = t.x
                  , s = t.x + t.width
                  , l = t.y
                  , u = t.y + t[He];
                return !(o > n || i > s || l > a || r > u)
            },
            contain: function(t, e) {
                var i = this;
                return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i[He]
            },
            clone: function() {
                return new e(this.x,this.y,this.width,this[He])
            },
            copy: function(t) {
                this.x = t.x,
                this.y = t.y,
                this.width = t.width,
                this[He] = t[He]
            }
        },
        e
    }),
    e("echarts/component/visualMap/preprocessor", [li, si], function(t) {
        function e(t, e) {
            return t && t.hasOwnProperty && t.hasOwnProperty(e)
        }
        var i = t(si)
          , n = i.each;
        return function(t) {
            var r = t && t.visualMap;
            i[be](r) || (r = r ? [r] : []),
            n(r, function(t) {
                if (t) {
                    e(t, "splitList") && !e(t, "pieces") && (t.pieces = t.splitList,
                    delete t.splitList);
                    var r = t.pieces;
                    r && i[be](r) && n(r, function(t) {
                        i[Ge](t) && (e(t, "start") && !e(t, "min") && (t.min = t.start),
                        e(t, "end") && !e(t, "max") && (t.max = t.end))
                    })
                }
            })
        }
    }),
    e("echarts/component/visualMap/typeDefaulter", [li, "../../model/Component"], function(t) {
        t("../../model/Component").registerSubTypeDefaulter("visualMap", function(t) {
            return t.categories || (t.pieces ? t.pieces[Ve] > 0 : t.splitNumber > 0) && !t.calculable ? "piecewise" : "continuous"
        })
    }),
    e("echarts/chart/helper/createListFromArray", [li, "../../data/List", "../../data/helper/completeDimensions", si, "../../util/model", "../../CoordinateSystem"], function(t) {
        function e(t) {
            for (var e = 0; e < t[Ve] && null == t[e]; )
                e++;
            return t[e]
        }
        function i(t) {
            var i = e(t);
            return null != i && !u[be](f(i))
        }
        function n(t, e, n) {
            t = t || [];
            var r = e.get(de)
              , a = m[r]
              , u = h.get(r)
              , c = a && a(t, e, n)
              , d = c && c[U];
            d || (d = u && u[U] || ["x", "y"],
            d = l(d, t, d[H](["value"])));
            var v = c && c.categoryAxisModel
              , g = d[0].type === y ? 0 : d[1].type === y ? 1 : -1
              , x = new s(d,e)
              , _ = o(c, t)
              , b = v && i(t) ? function(t, e, i, n) {
                return n === g ? i : p(f(t), d[n])
            }
            : function(t, e, i, n) {
                var r = f(t);
                return p(r && r[n], d[n])
            }
            ;
            return x.initData(t, _, b),
            x
        }
        function r(t) {
            return t !== x && "time" !== t
        }
        function a(t) {
            return t === x ? y : "time" === t ? "time" : "float"
        }
        function o(t, e) {
            var i = [];
            if (t && t.categoryAxisModel) {
                var n = t.categoryAxisModel.getCategories();
                if (n) {
                    var r = e[Ve];
                    if (u[be](e[0]) && e[0][Ve] > 1) {
                        i = [];
                        for (var a = 0; r > a; a++)
                            i[a] = n[e[a][0]]
                    } else
                        i = n.slice(0)
                }
            }
            return i
        }
        var s = t("../../data/List")
          , l = t("../../data/helper/completeDimensions")
          , u = t(si)
          , c = t("../../util/model")
          , h = t("../../CoordinateSystem")
          , f = c.getDataItemValue
          , p = c.converDataValue
          , m = {
            cartesian2d: function(t, e, i) {
                var n = i[W]("xAxis", e.get("xAxisIndex"))
                  , o = i[W]("yAxis", e.get("yAxisIndex"))
                  , s = n.get("type")
                  , u = o.get("type")
                  , c = [{
                    name: "x",
                    type: a(s),
                    stackable: r(s)
                }, {
                    name: "y",
                    type: a(u),
                    stackable: r(u)
                }];
                return l(c, t, ["x", "y", "z"]),
                {
                    dimensions: c,
                    categoryAxisModel: s === x ? n : u === x ? o : null
                }
            },
            polar: function(t, e, i) {
                var n = e.get("polarIndex") || 0
                  , o = function(t) {
                    return t.get("polarIndex") === n
                }
                  , s = i.findComponents({
                    mainType: "angleAxis",
                    filter: o
                })[0]
                  , u = i.findComponents({
                    mainType: "radiusAxis",
                    filter: o
                })[0]
                  , c = u.get("type")
                  , h = s.get("type")
                  , f = [{
                    name: "radius",
                    type: a(c),
                    stackable: r(c)
                }, {
                    name: "angle",
                    type: a(h),
                    stackable: r(h)
                }];
                return l(f, t, [d, "angle", "value"]),
                {
                    dimensions: f,
                    categoryAxisModel: h === x ? s : c === x ? u : null
                }
            },
            geo: function(t) {
                return {
                    dimensions: l([{
                        name: "lng"
                    }, {
                        name: "lat"
                    }], t, ["lng", "lat", "value"])
                }
            }
        };
        return n
    }),
    e("echarts/component/visualMap/visualCoding", [li, m, "../../visual/VisualMapping", si], function(t) {
        function e(t) {
            var e = t.targetVisuals
              , i = {};
            r.each(["inRange", "outOfRange"], function(t) {
                var r = n.prepareVisualTypes(e[t]);
                i[t] = r
            }),
            t.eachTargetSeries(function(n) {
                function r(t) {
                    return s[p](o, t)
                }
                function a(t, e) {
                    s[A](o, t, e)
                }
                var o, s = n[Pe](), l = t.getDataDimension(s);
                s.each([l], function(n, s) {
                    o = s;
                    for (var l = t.getValueState(n), u = e[l], c = i[l], h = 0, d = c[Ve]; d > h; h++) {
                        var f = c[h];
                        u[f] && u[f].applyVisual(n, r, a)
                    }
                })
            })
        }
        var i = t(m)
          , n = t("../../visual/VisualMapping")
          , r = t(si);
        i.registerVisualCoding("component", function(t) {
            t[je]("visualMap", function(i) {
                e(i, t)
            })
        })
    }),
    e("echarts/component/visualMap/ContinuousModel", [li, "./VisualMapModel", si, r], function(t) {
        var e = t("./VisualMapModel")
          , i = t(si)
          , n = t(r)
          , a = [20, 140];
        return e[Ze]({
            type: "visualMap.continuous",
            defaultOption: {
                handlePosition: "auto",
                calculable: !1,
                range: [-1 / 0, 1 / 0],
                hoverLink: !0,
                realtime: !0,
                itemWidth: null,
                itemHeight: null
            },
            doMergeOption: function(t, e) {
                this.$superApply("doMergeOption", arguments),
                this.resetTargetSeries(t, e),
                this.resetExtent(),
                this.resetVisual(function(t) {
                    t.mappingMethod = "linear"
                }),
                this._resetRange()
            },
            resetItemSize: function() {
                e[ii].resetItemSize.apply(this, arguments);
                var t = this.itemSize;
                this._orient === s && t.reverse(),
                (null == t[0] || isNaN(t[0])) && (t[0] = a[0]),
                (null == t[1] || isNaN(t[1])) && (t[1] = a[1])
            },
            _resetRange: function() {
                var t = this[$]()
                  , e = this[Ke].range;
                e[0] > e[1] && e.reverse(),
                e[0] = Math.max(e[0], t[0]),
                e[1] = Math.min(e[1], t[1])
            },
            completeVisualOption: function() {
                e[ii].completeVisualOption.apply(this, arguments),
                i.each(this.stateList, function(t) {
                    var e = this[Ke].controller[t][l];
                    e && e[0] !== e[1] && (e[0] = 0)
                }, this)
            },
            setSelected: function(t) {
                this[Ke].range = t.slice(),
                this._resetRange()
            },
            getSelected: function() {
                var t = this[$]()
                  , e = n.asc((this.get("range") || []).slice());
                return e[0] > t[1] && (e[0] = t[1]),
                e[1] > t[1] && (e[1] = t[1]),
                e[0] < t[0] && (e[0] = t[0]),
                e[1] < t[0] && (e[1] = t[0]),
                e
            },
            getValueState: function(t) {
                var e = this[Ke].range
                  , i = this[$]();
                return (e[0] <= i[0] || e[0] <= t) && (e[1] >= i[1] || t <= e[1]) ? "inRange" : "outOfRange"
            }
        })
    }),
    e("echarts/component/visualMap/ContinuousView", [li, "./VisualMapView", v, si, r, "../helper/sliderMove", "zrender/graphic/LinearGradient", "./helper"], function(t) {
        function e(t, e, i) {
            return new o.Polygon({
                shape: {
                    points: t
                },
                draggable: !!e,
                cursor: i,
                drift: e
            })
        }
        function i(t, e) {
            return 0 === t ? [[0, 0], [e, 0], [e, -e]] : [[0, 0], [e, 0], [e, e]]
        }
        var n = t("./VisualMapView")
          , o = t(v)
          , u = t(si)
          , c = t(r)
          , h = t("../helper/sliderMove")
          , d = c[C]
          , f = t("zrender/graphic/LinearGradient")
          , p = t("./helper")
          , m = u.each
          , g = n[Ze]({
            type: "visualMap.continuous",
            init: function() {
                n[ii].init.apply(this, arguments),
                this._shapes = {},
                this._dataInterval = [],
                this._handleEnds = [],
                this._orient,
                this._useHandle
            },
            doRender: function(t, e, i, n) {
                n && "selectDataRange" === n.type && n.from === this.uid ? this._updateView() : this._buildView()
            },
            _buildView: function() {
                this.group[pe]();
                var t = this.visualMapModel
                  , e = this.group;
                this._orient = t.get(a),
                this._useHandle = t.get("calculable"),
                this._resetInterval(),
                this._renderBar(e);
                var i = t.get("text");
                this._renderEndsText(e, i, 0),
                this._renderEndsText(e, i, 1),
                this._updateView(!0),
                this.renderBackground(e),
                this._updateView(),
                this.positionGroup(e)
            },
            _renderEndsText: function(t, e, i) {
                if (e) {
                    var n = e[1 - i];
                    n = null != n ? n + "" : "";
                    var r = this.visualMapModel
                      , a = r.get("textGap")
                      , l = r.itemSize
                      , u = this._shapes.barGroup
                      , c = this._applyTransform([l[0] / 2, 0 === i ? -a : l[1] + a], u)
                      , h = this._applyTransform(0 === i ? We : "top", u)
                      , d = this._orient
                      , f = this.visualMapModel.textStyleModel;
                    this.group.add(new o.Text({
                        style: {
                            x: c[0],
                            y: c[1],
                            textBaseline: d === s ? M : h,
                            textAlign: d === s ? h : ae,
                            text: n,
                            textFont: f[ue](),
                            fill: f[le]()
                        }
                    }))
                }
            },
            _renderBar: function(t) {
                var i = this.visualMapModel
                  , n = this._shapes
                  , r = i.itemSize
                  , a = this._orient
                  , o = this._useHandle
                  , s = p.getItemAlign(i, this.api, r)
                  , l = n.barGroup = this._createBarGroup(s);
                l.add(n.outOfRange = e()),
                l.add(n.inRange = e(null, u.bind(this._modifyHandle, this, "all"), o ? "move" : null));
                var c = i.textStyleModel.getTextRect("国")
                  , h = Math.max(c.width, c[He]);
                o && (n.handleGroups = [],
                n.handleThumbs = [],
                n.handleLabels = [],
                n.handleLabelPoints = [],
                this._createHandle(l, 0, r, h, a, s),
                this._createHandle(l, 1, r, h, a, s)),
                t.add(l)
            },
            _createHandle: function(t, n, r, a, l) {
                var c = new o.Group({
                    position: [r[0], 0]
                })
                  , h = e(i(n, a), u.bind(this._modifyHandle, this, n), "move");
                c.add(h);
                var d = {
                    x: l === s ? a / 2 : 1.5 * a,
                    y: l === s ? 0 === n ? -(1.5 * a) : 1.5 * a : 0 === n ? -a / 2 : a / 2
                }
                  , f = this.visualMapModel.textStyleModel
                  , p = new o.Text({
                    silent: !0,
                    style: {
                        x: 0,
                        y: 0,
                        text: "",
                        textBaseline: "middle",
                        textFont: f[ue](),
                        fill: f[le]()
                    }
                });
                this.group.add(p);
                var m = this._shapes;
                m.handleThumbs[n] = h,
                m.handleGroups[n] = c,
                m.handleLabelPoints[n] = d,
                m.handleLabels[n] = p,
                t.add(c)
            },
            _modifyHandle: function(t, e, i) {
                if (this._useHandle) {
                    var n = this._applyTransform([e, i], this._shapes.barGroup, !0);
                    this._updateInterval(t, n[1]),
                    this.api[Ee]({
                        type: "selectDataRange",
                        from: this.uid,
                        visualMapId: this.visualMapModel.id,
                        selected: this._dataInterval.slice()
                    })
                }
            },
            _resetInterval: function() {
                var t = this.visualMapModel
                  , e = this._dataInterval = t.getSelected();
                this._handleEnds = d(e, t[$](), [0, t.itemSize[1]], !0)
            },
            _updateInterval: function(t, e) {
                e = e || 0;
                var i = this.visualMapModel
                  , n = this._handleEnds;
                h(e, n, [0, i.itemSize[1]], "all" === t ? "rigid" : "push", t),
                this._dataInterval = d(n, [0, i.itemSize[1]], i[$](), !0)
            },
            _updateView: function(t) {
                var e = this.visualMapModel
                  , i = e[$]()
                  , n = this._shapes
                  , r = this._dataInterval
                  , a = [0, e.itemSize[1]]
                  , o = t ? a : this._handleEnds
                  , l = this._createBarVisual(r, i, o, "inRange")
                  , u = this._createBarVisual(i, i, a, "outOfRange");
                n.inRange[ne]("fill", l.barColor)[z]("points", l.barPoints),
                n.outOfRange[ne]("fill", u.barColor)[z]("points", u.barPoints),
                this._useHandle && m([0, 1], function(t) {
                    n.handleThumbs[t][ne]("fill", l.handlesColor[t]),
                    n.handleLabels[t][ne]({
                        text: e.formatValueText(r[t]),
                        textAlign: this._applyTransform(this._orient === s ? 0 === t ? We : "top" : "left", n.barGroup)
                    })
                }, this),
                this._updateHandlePosition(o)
            },
            _createBarVisual: function(t, e, i, n) {
                var r = this.getControllerVisual(t, n, "color").color
                  , a = [this.getControllerVisual(t[0], n, l)[l], this.getControllerVisual(t[1], n, l)[l]]
                  , o = this._createBarPoints(i, a);
                return {
                    barColor: new f(0,0,1,1,r),
                    barPoints: o,
                    handlesColor: [r[0].color, r[r[Ve] - 1].color]
                }
            },
            _createBarPoints: function(t, e) {
                var i = this.visualMapModel.itemSize;
                return [[i[0] - e[0], t[0]], [i[0], t[0]], [i[0], t[1]], [i[0] - e[1], t[1]]]
            },
            _createBarGroup: function(t) {
                var e = this._orient
                  , i = this.visualMapModel.get(b);
                return new o.Group(e !== s || i ? e === s && i ? {
                    scale: t === We ? [-1, 1] : [1, 1],
                    rotation: -Math.PI / 2
                } : "vertical" !== e || i ? {
                    scale: "left" === t ? [1, 1] : [-1, 1]
                } : {
                    scale: "left" === t ? [1, -1] : [-1, -1]
                } : {
                    scale: t === We ? [1, 1] : [-1, 1],
                    rotation: Math.PI / 2
                })
            },
            _updateHandlePosition: function(t) {
                if (this._useHandle) {
                    var e = this._shapes;
                    m([0, 1], function(i) {
                        var n = e.handleGroups[i];
                        n[re][1] = t[i];
                        var r = e.handleLabelPoints[i]
                          , a = o[F]([r.x, r.y], o.getTransform(n, this.group));
                        e.handleLabels[i][ne]({
                            x: a[0],
                            y: a[1]
                        })
                    }, this)
                }
            },
            _applyTransform: function(t, e, i) {
                var n = o.getTransform(e, this.group);
                return o[u[be](t) ? F : "transformDirection"](t, n, i)
            }
        });
        return g
    }),
    e("echarts/util/clazz", [li, si], function(t) {
        function e(t, e) {
            for (var i, n = t.constructor, r = t[e]; (n = n.$superClass) && (i = n[ii][e]) && i === r; )
                ;
            return i
        }
        var i = t(si)
          , n = {}
          , r = "."
          , a = "___EC__COMPONENT__CONTAINER___"
          , o = n.parseClassType = function(t) {
            var e = {
                main: "",
                sub: ""
            };
            return t && (t = t.split(r),
            e.main = t[0] || "",
            e.sub = t[1] || ""),
            e
        }
        ;
        return n.enableClassExtend = function(t, n) {
            t[Ze] = function(r) {
                var a = function() {
                    n && n.apply(this, arguments),
                    t.apply(this, arguments)
                };
                return i[Ze](a[ii], i[Ze]({
                    $superCall: function(t) {
                        var n = i.slice(arguments, 1);
                        return e(this, t).apply(this, n)
                    },
                    $superApply: function(t, i) {
                        return e(this, t).apply(this, i)
                    }
                }, r)),
                a[Ze] = this[Ze],
                i[ve](a, this),
                a.$superClass = this,
                a
            }
        }
        ,
        n.enableClassManagement = function(t, e) {
            function n(t) {
                var e = r[t.main];
                return e && e[a] || (e = r[t.main] = {},
                e[a] = !0),
                e
            }
            e = e || {};
            var r = {};
            if (t.registerClass = function(t, e) {
                if (e)
                    if (e = o(e),
                    e.sub) {
                        if (e.sub !== a) {
                            var i = n(e);
                            i[e.sub] = t
                        }
                    } else {
                        if (r[e.main])
                            throw new Error(e.main + "exists");
                        r[e.main] = t
                    }
                return t
            }
            ,
            t.getClass = function(t, e, i) {
                var n = r[t];
                if (n && n[a] && (n = e ? n[e] : null),
                i && !n)
                    throw new Error("Component " + t + "." + (e || "") + " not exists");
                return n
            }
            ,
            t.getClassesByMainType = function(t) {
                t = o(t);
                var e = []
                  , n = r[t.main];
                return n && n[a] ? i.each(n, function(t, i) {
                    i !== a && e.push(t)
                }) : e.push(n),
                e
            }
            ,
            t.hasClass = function(t) {
                return t = o(t),
                !!r[t.main]
            }
            ,
            t.getAllClassMainTypes = function() {
                var t = [];
                return i.each(r, function(e, i) {
                    t.push(i)
                }),
                t
            }
            ,
            t.hasSubTypes = function(t) {
                t = o(t);
                var e = r[t.main];
                return e && e[a]
            }
            ,
            t.parseClassType = o,
            e.registerWhenExtend) {
                var s = t[Ze];
                s && (t[Ze] = function(e) {
                    var i = s.call(this, e);
                    return t.registerClass(i, e.type)
                }
                )
            }
            return t
        }
        ,
        n.setReadOnly = function() {}
        ,
        n
    }),
    e("echarts/util/component", [li, si, "./clazz"], function(t) {
        var e = t(si)
          , i = t("./clazz")
          , n = i.parseClassType
          , r = 0
          , a = {}
          , o = "_";
        return a.getUID = function(t) {
            return [t || "", r++, Math.random()].join(o)
        }
        ,
        a.enableSubTypeDefaulter = function(t) {
            var e = {};
            return t.registerSubTypeDefaulter = function(t, i) {
                t = n(t),
                e[t.main] = i
            }
            ,
            t.determineSubType = function(i, r) {
                var a = r.type;
                if (!a) {
                    var o = n(i).main;
                    t.hasSubTypes(i) && e[o] && (a = e[o](r))
                }
                return a
            }
            ,
            t
        }
        ,
        a.enableTopologicalTravel = function(t, i) {
            function n(t) {
                var n = {}
                  , o = [];
                return e.each(t, function(s) {
                    var l = r(n, s)
                      , u = l.originalDeps = i(s)
                      , c = a(u, t);
                    l.entryCount = c[Ve],
                    0 === l.entryCount && o.push(s),
                    e.each(c, function(t) {
                        e[_e](l.predecessor, t) < 0 && l.predecessor.push(t);
                        var i = r(n, t);
                        e[_e](i.successor, t) < 0 && i.successor.push(s)
                    })
                }),
                {
                    graph: n,
                    noEntryList: o
                }
            }
            function r(t, e) {
                return t[e] || (t[e] = {
                    predecessor: [],
                    successor: []
                }),
                t[e]
            }
            function a(t, i) {
                var n = [];
                return e.each(t, function(t) {
                    e[_e](i, t) >= 0 && n.push(t)
                }),
                n
            }
            t.topologicalTravel = function(t, i, r, a) {
                function o(t) {
                    u[t].entryCount--,
                    0 === u[t].entryCount && c.push(t)
                }
                function s(t) {
                    h[t] = !0,
                    o(t)
                }
                if (t[Ve]) {
                    var l = n(i)
                      , u = l.graph
                      , c = l.noEntryList
                      , h = {};
                    for (e.each(t, function(t) {
                        h[t] = !0
                    }); c[Ve]; ) {
                        var d = c.pop()
                          , f = u[d]
                          , p = !!h[d];
                        p && (r.call(a, d, f.originalDeps.slice()),
                        delete h[d]),
                        e.each(f.successor, p ? s : o)
                    }
                    e.each(h, function() {
                        throw new Error("Circle dependency may exists")
                    })
                }
            }
        }
        ,
        a
    }),
    e("echarts/component/visualMap/visualMapAction", [li, m], function(t) {
        var e = t(m)
          , i = {
            type: "selectDataRange",
            event: "dataRangeSelected",
            update: "update"
        };
        e.registerAction(i, function(t, e) {
            e[je]({
                mainType: "visualMap",
                query: t
            }, function(e) {
                e.setSelected(t.selected)
            })
        })
    }),
    e("echarts/model/mixin/boxLayout", [li], function() {
        return {
            getBoxLayoutParams: function() {
                return {
                    left: this.get("left"),
                    top: this.get("top"),
                    right: this.get("right"),
                    bottom: this.get(We),
                    width: this.get("width"),
                    height: this.get(He)
                }
            }
        }
    }),
    e("zrender/core/PathProxy", [li, "./curve", "./vector", "./bbox", "./BoundingRect"], function(t) {
        var e = t("./curve")
          , i = t("./vector")
          , n = t("./bbox")
          , r = t("./BoundingRect")
          , a = {
            M: 1,
            L: 2,
            C: 3,
            Q: 4,
            A: 5,
            Z: 6,
            R: 7
        }
          , o = []
          , s = []
          , l = []
          , u = []
          , c = Math.min
          , h = Math.max
          , d = Math.cos
          , f = Math.sin
          , p = Math.sqrt
          , m = typeof Float32Array != L
          , v = function() {
            this.data = [],
            this._len = 0,
            this._ctx = null,
            this._xi = 0,
            this._yi = 0,
            this._x0 = 0,
            this._y0 = 0
        };
        return v[ii] = {
            constructor: v,
            _lineDash: null,
            _dashOffset: 0,
            _dashIdx: 0,
            _dashSum: 0,
            getContext: function() {
                return this._ctx
            },
            beginPath: function(t) {
                return this._ctx = t,
                t && t.beginPath(),
                this._len = 0,
                this._lineDash && (this._lineDash = null,
                this._dashOffset = 0),
                this
            },
            moveTo: function(t, e) {
                return this.addData(a.M, t, e),
                this._ctx && this._ctx.moveTo(t, e),
                this._x0 = t,
                this._y0 = e,
                this._xi = t,
                this._yi = e,
                this
            },
            lineTo: function(t, e) {
                return this.addData(a.L, t, e),
                this._ctx && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)),
                this._xi = t,
                this._yi = e,
                this
            },
            bezierCurveTo: function(t, e, i, n, r, o) {
                return this.addData(a.C, t, e, i, n, r, o),
                this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, r, o) : this._ctx.bezierCurveTo(t, e, i, n, r, o)),
                this._xi = r,
                this._yi = o,
                this
            },
            quadraticCurveTo: function(t, e, i, n) {
                return this.addData(a.Q, t, e, i, n),
                this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) : this._ctx.quadraticCurveTo(t, e, i, n)),
                this._xi = i,
                this._yi = n,
                this
            },
            arc: function(t, e, i, n, r, o) {
                return this.addData(a.A, t, e, i, i, n, r - n, 0, o ? 0 : 1),
                this._ctx && this._ctx.arc(t, e, i, n, r, o),
                this._xi = d(r) * i + t,
                this._xi = f(r) * i + t,
                this
            },
            arcTo: function(t, e, i, n, r) {
                return this._ctx && this._ctx.arcTo(t, e, i, n, r),
                this
            },
            rect: function(t, e, i, n) {
                return this._ctx && this._ctx.rect(t, e, i, n),
                this.addData(a.R, t, e, i, n),
                this
            },
            closePath: function() {
                this.addData(a.Z);
                var t = this._ctx
                  , e = this._x0
                  , i = this._y0;
                return t && (this._needsDash() && this._dashedLineTo(e, i),
                t.closePath()),
                this._xi = e,
                this._yi = i,
                this
            },
            fill: function(t) {
                t && t.fill(),
                this.toStatic()
            },
            stroke: function(t) {
                t && t[N](),
                this.toStatic()
            },
            setLineDash: function(t) {
                if (t instanceof Array) {
                    this._lineDash = t,
                    this._dashIdx = 0;
                    for (var e = 0, i = 0; i < t[Ve]; i++)
                        e += t[i];
                    this._dashSum = e
                }
                return this
            },
            setLineDashOffset: function(t) {
                return this._dashOffset = t,
                this
            },
            len: function() {
                return this._len
            },
            setData: function(t) {
                var e = t[Ve];
                this.data && this.data[Ve] == e || !m || (this.data = new Float32Array(e));
                for (var i = 0; e > i; i++)
                    this.data[i] = t[i];
                this._len = e
            },
            appendPath: function(t) {
                t instanceof Array || (t = [t]);
                for (var e = t[Ve], i = 0, n = this._len, r = 0; e > r; r++)
                    i += t[r].len();
                m && this.data instanceof Float32Array && (this.data = new Float32Array(n + i));
                for (var r = 0; e > r; r++)
                    for (var a = t[r].data, o = 0; o < a[Ve]; o++)
                        this.data[n++] = a[o];
                this._len = n
            },
            addData: function(t) {
                var e = this.data;
                this._len + arguments[Ve] > e[Ve] && (this._expandData(),
                e = this.data);
                for (var i = 0; i < arguments[Ve]; i++)
                    e[this._len++] = arguments[i];
                this._prevCmd = t
            },
            _expandData: function() {
                if (!(this.data instanceof Array)) {
                    for (var t = [], e = 0; e < this._len; e++)
                        t[e] = this.data[e];
                    this.data = t
                }
            },
            _needsDash: function() {
                return this._lineDash
            },
            _dashedLineTo: function(t, e) {
                var i, n, r = this._dashSum, a = this._dashOffset, o = this._lineDash, s = this._ctx, l = this._xi, u = this._yi, d = t - l, f = e - u, m = p(d * d + f * f), v = l, g = u, y = o[Ve];
                for (d /= m,
                f /= m,
                0 > a && (a = r + a),
                a %= r,
                v -= a * d,
                g -= a * f; d >= 0 && t >= v || 0 > d && v > t; )
                    n = this._dashIdx,
                    i = o[n],
                    v += d * i,
                    g += f * i,
                    this._dashIdx = (n + 1) % y,
                    d > 0 && l > v || 0 > d && v > l || s[n % 2 ? "moveTo" : "lineTo"](d >= 0 ? c(v, t) : h(v, t), f >= 0 ? c(g, e) : h(g, e));
                d = v - t,
                f = g - e,
                this._dashOffset = -p(d * d + f * f)
            },
            _dashedBezierTo: function(t, i, n, r, a, o) {
                var s, l, u, c, h, d = this._dashSum, f = this._dashOffset, m = this._lineDash, v = this._ctx, g = this._xi, y = this._yi, x = e.cubicAt, _ = 0, b = this._dashIdx, w = m[Ve], M = 0;
                for (0 > f && (f = d + f),
                f %= d,
                s = 0; 1 > s; s += .1)
                    l = x(g, t, n, a, s + .1) - x(g, t, n, a, s),
                    u = x(y, i, r, o, s + .1) - x(y, i, r, o, s),
                    _ += p(l * l + u * u);
                for (; w > b && (M += m[b],
                !(M > f)); b++)
                    ;
                for (s = (M - f) / _; 1 >= s; )
                    c = x(g, t, n, a, s),
                    h = x(y, i, r, o, s),
                    b % 2 ? v.moveTo(c, h) : v.lineTo(c, h),
                    s += m[b] / _,
                    b = (b + 1) % w;
                b % 2 !== 0 && v.lineTo(a, o),
                l = a - c,
                u = o - h,
                this._dashOffset = -p(l * l + u * u)
            },
            _dashedQuadraticTo: function(t, e, i, n) {
                var r = i
                  , a = n;
                i = (i + 2 * t) / 3,
                n = (n + 2 * e) / 3,
                t = (this._xi + 2 * t) / 3,
                e = (this._yi + 2 * e) / 3,
                this._dashedBezierTo(t, e, i, n, r, a)
            },
            toStatic: function() {
                this.data[Ve] = this._len,
                m && this.data instanceof Array && (this.data = new Float32Array(this.data))
            },
            getBoundingRect: function() {
                o[0] = o[1] = l[0] = l[1] = Number.MAX_VALUE,
                s[0] = s[1] = u[0] = u[1] = -Number.MAX_VALUE;
                for (var t = this.data, e = 0, c = 0, h = 0, p = 0, m = 0; m < t[Ve]; ) {
                    var v = t[m++];
                    switch (1 == m && (e = t[m],
                    c = t[m + 1],
                    h = e,
                    p = c),
                    v) {
                    case a.M:
                        h = t[m++],
                        p = t[m++],
                        e = h,
                        c = p,
                        l[0] = h,
                        l[1] = p,
                        u[0] = h,
                        u[1] = p;
                        break;
                    case a.L:
                        n.fromLine(e, c, t[m], t[m + 1], l, u),
                        e = t[m++],
                        c = t[m++];
                        break;
                    case a.C:
                        n.fromCubic(e, c, t[m++], t[m++], t[m++], t[m++], t[m], t[m + 1], l, u),
                        e = t[m++],
                        c = t[m++];
                        break;
                    case a.Q:
                        n.fromQuadratic(e, c, t[m++], t[m++], t[m], t[m + 1], l, u),
                        e = t[m++],
                        c = t[m++];
                        break;
                    case a.A:
                        var g = t[m++]
                          , y = t[m++]
                          , x = t[m++]
                          , _ = t[m++]
                          , b = t[m++]
                          , w = t[m++] + b
                          , M = (t[m++],
                        1 - t[m++]);
                        1 == m && (h = d(b) * x + g,
                        p = f(b) * _ + y),
                        n.fromArc(g, y, x, _, b, w, M, l, u),
                        e = d(w) * x + g,
                        c = f(w) * _ + y;
                        break;
                    case a.R:
                        h = e = t[m++],
                        p = c = t[m++];
                        var S = t[m++]
                          , C = t[m++];
                        n.fromLine(h, p, h + S, p + C, l, u);
                        break;
                    case a.Z:
                        e = h,
                        c = p
                    }
                    i.min(o, o, l),
                    i.max(s, s, u)
                }
                return 0 === m && (o[0] = o[1] = s[0] = s[1] = 0),
                new r(o[0],o[1],s[0] - o[0],s[1] - o[1])
            },
            rebuildPath: function(t) {
                for (var e = this.data, i = 0; i < this._len; ) {
                    var n = e[i++];
                    switch (n) {
                    case a.M:
                        t.moveTo(e[i++], e[i++]);
                        break;
                    case a.L:
                        t.lineTo(e[i++], e[i++]);
                        break;
                    case a.C:
                        t.bezierCurveTo(e[i++], e[i++], e[i++], e[i++], e[i++], e[i++]);
                        break;
                    case a.Q:
                        t.quadraticCurveTo(e[i++], e[i++], e[i++], e[i++]);
                        break;
                    case a.A:
                        var r = e[i++]
                          , o = e[i++]
                          , s = e[i++]
                          , l = e[i++]
                          , u = e[i++]
                          , c = e[i++]
                          , h = e[i++]
                          , d = e[i++]
                          , f = s > l ? s : l
                          , p = s > l ? 1 : s / l
                          , m = s > l ? l / s : 1
                          , v = Math.abs(s - l) > .001;
                        v ? (t.translate(r, o),
                        t.rotate(h),
                        t.scale(p, m),
                        t.arc(0, 0, f, u, u + c, 1 - d),
                        t.scale(1 / p, 1 / m),
                        t.rotate(-h),
                        t.translate(-r, -o)) : t.arc(r, o, f, u, u + c, 1 - d);
                        break;
                    case a.R:
                        t.rect(e[i++], e[i++], e[i++], e[i++]);
                        break;
                    case a.Z:
                        t.closePath()
                    }
                }
            }
        },
        v.CMD = a,
        v
    }),
    e("zrender/graphic/mixin/RectText", [li, "../../contain/text", "../../core/BoundingRect"], function(t) {
        function e(t, e) {
            return typeof t === ei ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t
        }
        function i(t, e) {
            t[ai](e[0], e[1], e[2], e[3], e[4], e[5])
        }
        var n = t("../../contain/text")
          , r = t("../../core/BoundingRect")
          , a = new r
          , o = function() {};
        return o[ii] = {
            constructor: o,
            drawRectText: function(t, r, o) {
                var s = this.style
                  , l = s.text;
                if (null != l && (l += ""),
                l) {
                    var u, c, h = s.textPosition, d = s.textDistance, f = s[ce], p = s.textFont || s.font, m = s.textBaseline;
                    o = o || n[se](l, p, f, m);
                    var v = this[ai]
                      , g = this.invTransform;
                    if (v && (a.copy(r),
                    a[F](v),
                    r = a,
                    i(t, g)),
                    h instanceof Array)
                        u = r.x + e(h[0], r.width),
                        c = r.y + e(h[1], r[He]),
                        f = f || "left",
                        m = m || "top";
                    else {
                        var y = n.adjustTextPositionOnRect(h, r, o, d);
                        u = y.x,
                        c = y.y,
                        f = f || y[ce],
                        m = m || y.textBaseline
                    }
                    t[ce] = f,
                    t.textBaseline = m;
                    var x = s.textFill
                      , _ = s.textStroke;
                    x && (t.fillStyle = x),
                    _ && (t.strokeStyle = _),
                    t.font = p,
                    t.shadowColor = s.textShadowColor,
                    t.shadowBlur = s.textShadowBlur,
                    t.shadowOffsetX = s.textShadowOffsetX,
                    t.shadowOffsetY = s.textShadowOffsetY;
                    for (var b = l.split("\n"), w = 0; w < b[Ve]; w++)
                        x && t.fillText(b[w], u, c),
                        _ && t.strokeText(b[w], u, c),
                        c += o.lineHeight;
                    v && i(t, v)
                }
            }
        },
        o
    }),
    e("zrender/vml/core", [li, "exports", "module", "../core/env"], function(t, e, i) {
        if (!t("../core/env")[Ue]) {
            var n, r = "urn:schemas-microsoft-com:vml", a = window, o = a.document, s = !1;
            try {
                !o.namespaces.zrvml && o.namespaces.add("zrvml", r),
                n = function(t) {
                    return o[D]("<zrvml:" + t + ' class="zrvml">')
                }
            } catch (l) {
                n = function(t) {
                    return o[D]("<" + t + ' xmlns="' + r + '" class="zrvml">')
                }
            }
            var u = function() {
                if (!s) {
                    s = !0;
                    var t = o.styleSheets;
                    t[Ve] < 31 ? o.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml", "behavior:url(#default#VML)")
                }
            };
            i.exports = {
                doc: o,
                initVML: u,
                createNode: n
            }
        }
    }),
    e("zrender/contain/text", [li, k, "../core/BoundingRect"], function(t) {
        function e(t, e) {
            var i = t + ":" + e;
            if (s[i])
                return s[i];
            for (var n = (t + "").split("\n"), r = 0, a = 0, o = n[Ve]; o > a; a++)
                r = Math.max(d.measureText(n[a], e).width, r);
            return l > u && (l = 0,
            s = {}),
            l++,
            s[i] = r,
            r
        }
        function i(t, i, n, r) {
            var a = ((t || "") + "").split("\n")[Ve]
              , o = e(t, i)
              , s = e("国", i)
              , l = a * s
              , u = new h(0,0,o,l);
            switch (u.lineHeight = s,
            r) {
            case We:
            case "alphabetic":
                u.y -= s;
                break;
            case M:
                u.y -= s / 2
            }
            switch (n) {
            case "end":
            case "right":
                u.x -= u.width;
                break;
            case ae:
                u.x -= u.width / 2
            }
            return u
        }
        function n(t, e, i, n) {
            var r = e.x
              , a = e.y
              , o = e[He]
              , s = e.width
              , l = i[He]
              , u = o / 2 - l / 2
              , c = "left";
            switch (t) {
            case "left":
                r -= n,
                a += u,
                c = "right";
                break;
            case "right":
                r += n + s,
                a += u,
                c = "left";
                break;
            case "top":
                r += s / 2,
                a -= n + l,
                c = ae;
                break;
            case We:
                r += s / 2,
                a += o + n,
                c = ae;
                break;
            case "inside":
                r += s / 2,
                a += u,
                c = ae;
                break;
            case "insideLeft":
                r += n,
                a += u,
                c = "left";
                break;
            case "insideRight":
                r += s - n,
                a += u,
                c = "right";
                break;
            case "insideTop":
                r += s / 2,
                a += n,
                c = ae;
                break;
            case "insideBottom":
                r += s / 2,
                a += o - l - n,
                c = ae;
                break;
            case "insideTopLeft":
                r += n,
                a += n,
                c = "left";
                break;
            case "insideTopRight":
                r += s - n,
                a += n,
                c = "right";
                break;
            case "insideBottomLeft":
                r += n,
                a += o - l - n;
                break;
            case "insideBottomRight":
                r += s - n,
                a += o - l - n,
                c = "right"
            }
            return {
                x: r,
                y: a,
                textAlign: c,
                textBaseline: "top"
            }
        }
        function r(t, i, n, r) {
            if (!n)
                return "";
            r = c[Be]({
                ellipsis: "...",
                minCharacters: 3,
                maxIterations: 3,
                cnCharWidth: e("国", i),
                ascCharWidth: e("a", i)
            }, r, !0),
            n -= e(r.ellipsis);
            for (var o = (t + "").split("\n"), s = 0, l = o[Ve]; l > s; s++)
                o[s] = a(o[s], i, n, r);
            return o.join("\n")
        }
        function a(t, i, n, r) {
            for (var a = 0; ; a++) {
                var s = e(t, i);
                if (n > s || a >= r.maxIterations) {
                    t += r.ellipsis;
                    break
                }
                var l = 0 === a ? o(t, n, r) : Math.floor(t[Ve] * n / s);
                if (l < r.minCharacters) {
                    t = "";
                    break
                }
                t = t.substr(0, l)
            }
            return t
        }
        function o(t, e, i) {
            for (var n = 0, r = 0, a = t[Ve]; a > r && e > n; r++) {
                var o = t.charCodeAt(r);
                n += o >= 0 && 127 >= o ? i.ascCharWidth : i.cnCharWidth
            }
            return r
        }
        var s = {}
          , l = 0
          , u = 5e3
          , c = t(k)
          , h = t("../core/BoundingRect")
          , d = {
            getWidth: e,
            getBoundingRect: i,
            adjustTextPositionOnRect: n,
            ellipsis: r,
            measureText: function(t, e) {
                var i = c[P]();
                return i.font = e,
                i.measureText(t)
            }
        };
        return d
    }),
    e("zrender/graphic/Displayable", [li, k, "./Style", "../Element", "./mixin/RectText"], function(t) {
        function e(t) {
            t = t || {},
            r.call(this, t);
            for (var e in t)
                t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
            this.style = new n(t.style),
            this._rect = null,
            this.__clipPaths = []
        }
        var i = t(k)
          , n = t("./Style")
          , r = t("../Element")
          , a = t("./mixin/RectText");
        return e[ii] = {
            constructor: e,
            type: "displayable",
            __dirty: !0,
            invisible: !1,
            z: 0,
            z2: 0,
            zlevel: 0,
            draggable: !1,
            dragging: !1,
            silent: !1,
            culling: !1,
            cursor: "pointer",
            rectHover: !1,
            beforeBrush: function() {},
            afterBrush: function() {},
            brush: function() {},
            getBoundingRect: function() {},
            contain: function(t, e) {
                return this.rectContain(t, e)
            },
            traverse: function(t, e) {
                t.call(e, this)
            },
            rectContain: function(t, e) {
                var i = this.transformCoordToLocal(t, e)
                  , n = this[se]();
                return n[te](i[0], i[1])
            },
            dirty: function() {
                this.__dirty = !0,
                this._rect = null,
                this.__zr && this.__zr.refresh()
            },
            animateStyle: function(t) {
                return this.animate("style", t)
            },
            attrKV: function(t, e) {
                "style" !== t ? r[ii].attrKV.call(this, t, e) : this.style.set(e)
            },
            setStyle: function(t, e) {
                return this.style.set(t, e),
                this.dirty(),
                this
            }
        },
        i[ve](e, r),
        i.mixin(e, a),
        e
    }),
    e("echarts/component/toolbox/featureManager", [li], function() {
        var t = {};
        return {
            register: function(e, i) {
                t[e] = i
            },
            get: function(e) {
                return t[e]
            }
        }
    }),
    e("echarts/model/mixin/lineStyle", [li, "./makeStyleMapper"], function(t) {
        var e = t("./makeStyleMapper")([[G, "width"], [N, "color"], [ie], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]]);
        return {
            getLineStyle: function(t) {
                var i = e.call(this, t)
                  , n = this.getLineDash();
                return n && (i.lineDash = n),
                i
            },
            getLineDash: function() {
                var t = this.get("type");
                return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1]
            }
        }
    }),
    e("echarts/model/mixin/areaStyle", [li, "./makeStyleMapper"], function(t) {
        return {
            getAreaStyle: t("./makeStyleMapper")([["fill", "color"], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], [ie], ["shadowColor"]])
        }
    }),
    e("echarts/coord/axisHelper", [li, "../scale/Ordinal", "../scale/Interval", "../scale/Time", "../scale/Log", "../scale/Scale", ee, si, "zrender/contain/text"], function(t) {
        var e = t("../scale/Ordinal")
          , i = t("../scale/Interval");
        t("../scale/Time"),
        t("../scale/Log");
        var n = t("../scale/Scale")
          , r = t(ee)
          , a = t(si)
          , s = t("zrender/contain/text")
          , l = {};
        return l.niceScaleExtent = function(t, e) {
            var i = t.scale;
            if (i.type !== y) {
                var n = e.get("min")
                  , s = e.get("max")
                  , l = !e.get("scale")
                  , u = e.get("boundaryGap");
                a[be](u) || (u = [u || 0, u || 0]),
                u[0] = r[S](u[0], 1),
                u[1] = r[S](u[1], 1);
                var c = i[$]()
                  , h = c[1] - c[0]
                  , d = !0
                  , f = !0;
                null == n && (n = c[0] - u[0] * h,
                d = !1),
                null == s && (s = c[1] + u[1] * h,
                f = !1),
                "dataMin" === n && (n = c[0]),
                "dataMax" === s && (s = c[1]),
                l && (n > 0 && s > 0 && !d && (n = 0),
                0 > n && 0 > s && !f && (s = 0)),
                i.setExtent(n, s),
                i.niceExtent(e.get("splitNumber"), d, f);
                var p = e.get(o);
                null != p && i.setInterval && i.setInterval(p)
            }
        }
        ,
        l.createScaleByModel = function(t, r) {
            if (r = r || t.get("type"))
                switch (r) {
                case x:
                    return new e(t.getCategories(),[1 / 0, -1 / 0]);
                case "value":
                    return new i;
                default:
                    return (n.getClass(r) || i)[J](t)
                }
        }
        ,
        l.ifAxisCrossZero = function(t) {
            var e = t.scale[$]()
              , i = e[0]
              , n = e[1];
            return !(i > 0 && n > 0 || 0 > i && 0 > n)
        }
        ,
        l.getAxisLabelInterval = function(t, e, i, n) {
            for (var r, a = 0, o = 0, l = 0; l < t[Ve]; l++) {
                var u = t[l]
                  , c = s[se](e[l], i, ae, "top");
                c[n ? "x" : "y"] += u,
                c[n ? "width" : He] *= 1.5,
                r ? r.intersect(c) ? (o++,
                a = Math.max(a, o)) : (r.union(c),
                o = 0) : r = c.clone()
            }
            return a
        }
        ,
        l.getFormattedLabels = function(t, e) {
            var i = t.scale
              , n = i.getTicksLabels()
              , r = i[Q]();
            return typeof e === ei ? (e = function(t) {
                return function(e) {
                    return t[we]("{value}", e)
                }
            }(e),
            a.map(n, e)) : typeof e === xe ? a.map(r, function(n, r) {
                return e(t.type === x ? i[K](n) : n, r)
            }, this) : n
        }
        ,
        l
    }),
    e("echarts/model/mixin/itemStyle", [li, "./makeStyleMapper"], function(t) {
        return {
            getItemStyle: t("./makeStyleMapper")([["fill", "color"], [N, "borderColor"], [G, "borderWidth"], [ie], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]])
        }
    }),
    e("echarts/model/mixin/textStyle", [li, "zrender/contain/text"], function(t) {
        function e(t, e) {
            return t && t[V](e)
        }
        var i = t("zrender/contain/text");
        return {
            getTextColor: function() {
                var t = this[q];
                return this[V]("color") || t && t.get("textStyle.color")
            },
            getFont: function() {
                var t = this[q]
                  , i = t && t[Qe](he);
                return [this[V]("fontStyle") || e(i, "fontStyle"), this[V]("fontWeight") || e(i, "fontWeight"), (this[V]("fontSize") || e(i, "fontSize") || 12) + "px", this[V]("fontFamily") || e(i, "fontFamily") || "sans-serif"].join(" ")
            },
            getTextRect: function(t) {
                var e = this.get(he) || {};
                return i[se](t, this[ue](), e.align, e.baseline)
            },
            ellipsis: function(t, e, n) {
                return i.ellipsis(t, this[ue](), e, n)
            }
        }
    }),
    e("echarts/coord/cartesian/Cartesian2D", [li, si, "./Cartesian"], function(t) {
        function e(t) {
            n.call(this, t)
        }
        var i = t(si)
          , n = t("./Cartesian");
        return e[ii] = {
            constructor: e,
            type: "cartesian2d",
            dimensions: ["x", "y"],
            getBaseAxis: function() {
                return this.getAxesByScale(y)[0] || this.getAxesByScale("time")[0] || this[_]("x")
            },
            containPoint: function(t) {
                var e = this[_]("x")
                  , i = this[_]("y");
                return e[te](e.toLocalCoord(t[0])) && i[te](i.toLocalCoord(t[1]))
            },
            containData: function(t) {
                return this[_]("x").containData(t[0]) && this[_]("y").containData(t[1])
            },
            dataToPoints: function(t, e) {
                return t[h](["x", "y"], function(t, e) {
                    return this[g]([t, e])
                }, e, this)
            },
            dataToPoint: function(t, e) {
                var i = this[_]("x")
                  , n = this[_]("y");
                return [i.toGlobalCoord(i[f](t[0], e)), n.toGlobalCoord(n[f](t[1], e))]
            },
            pointToData: function(t, e) {
                var i = this[_]("x")
                  , n = this[_]("y");
                return [i.coordToData(i.toLocalCoord(t[0]), e), n.coordToData(n.toLocalCoord(t[1]), e)]
            },
            getOtherAxis: function(t) {
                return this[_]("x" === t.dim ? "y" : "x")
            }
        },
        i[ve](e, n),
        e
    }),
    e("echarts/coord/cartesian/Axis2D", [li, si, "../Axis", "./axisLabelInterval"], function(t) {
        var e = t(si)
          , i = t("../Axis")
          , n = t("./axisLabelInterval")
          , r = function(t, e, n, r, a) {
            i.call(this, t, e, n),
            this.type = r || "value",
            this[re] = a || We
        };
        return r[ii] = {
            constructor: r,
            index: 0,
            onZero: !1,
            model: null,
            isHorizontal: function() {
                var t = this[re];
                return "top" === t || t === We
            },
            getGlobalExtent: function() {
                var t = this[$]();
                return t[0] = this.toGlobalCoord(t[0]),
                t[1] = this.toGlobalCoord(t[1]),
                t
            },
            getLabelInterval: function() {
                var t = this._labelInterval;
                return t || (t = this._labelInterval = n(this)),
                t
            },
            isLabelIgnored: function(t) {
                if (this.type === x) {
                    var e = this.getLabelInterval();
                    return typeof e === xe && !e(t, this.scale[K](t)) || t % (e + 1)
                }
            },
            toLocalCoord: null,
            toGlobalCoord: null
        },
        e[ve](r, i),
        r
    }),
    e("echarts/coord/cartesian/GridModel", [li, "./AxisModel", "../../model/Component"], function(t) {
        t("./AxisModel");
        var e = t("../../model/Component");
        return e[Ze]({
            type: "grid",
            dependencies: ["xAxis", "yAxis"],
            layoutMode: "box",
            coordinateSystem: null,
            defaultOption: {
                show: !1,
                zlevel: 0,
                z: 0,
                left: "10%",
                top: 60,
                right: "10%",
                bottom: 60,
                containLabel: !1,
                backgroundColor: "rgba(0,0,0,0)",
                borderWidth: 1,
                borderColor: "#ccc"
            }
        })
    }),
    e("zrender/tool/transformPath", [li, "../core/PathProxy", "../core/vector"], function(t) {
        function e(t, e) {
            var n, l, u, c, h, d = t.data, f = i.M, p = i.C, m = i.L, v = i.R, g = i.A, y = i.Q;
            for (u = 0,
            c = 0; u < d[Ve]; ) {
                switch (n = d[u++],
                c = u,
                l = 0,
                n) {
                case f:
                    l = 1;
                    break;
                case m:
                    l = 1;
                    break;
                case p:
                    l = 3;
                    break;
                case y:
                    l = 2;
                    break;
                case g:
                    {
                        var x = e[4]
                          , _ = e[5]
                          , b = o(e[0] * e[0] + e[1] * e[1])
                          , w = o(e[2] * e[2] + e[3] * e[3])
                          , M = s(-e[1] / w, e[0] / b);
                        d[u + 7]
                    }
                    d[u++] += x,
                    d[u++] += _,
                    d[u++] *= b,
                    d[u++] *= w,
                    d[u++] += M,
                    d[u++] += M,
                    u += 2,
                    c = u;
                    break;
                case v:
                    S[0] = d[u++],
                    S[1] = d[u++],
                    r(S, S, e),
                    d[c++] = S[0],
                    d[c++] = S[1],
                    S[0] += d[u++],
                    S[1] += d[u++],
                    r(S, S, e),
                    d[c++] = S[0],
                    d[c++] = S[1]
                }
                for (h = 0; l > h; h++) {
                    var S = a[h];
                    S[0] = d[u++],
                    S[1] = d[u++],
                    r(S, S, e),
                    d[c++] = S[0],
                    d[c++] = S[1]
                }
            }
        }
        var i = t("../core/PathProxy").CMD
          , n = t("../core/vector")
          , r = n[F]
          , a = [[], [], []]
          , o = Math.sqrt
          , s = Math.atan2;
        return e
    }),
    e("zrender/contain/path", [li, "../core/PathProxy", "./line", "./cubic", "./quadratic", "./arc", "./util", "../core/curve", "./windingLine"], function(t) {
        function e(t, e) {
            return Math.abs(t - e) < g
        }
        function i() {
            var t = x[0];
            x[0] = x[1],
            x[1] = t
        }
        function n(t, e, n, r, a, o, s, l, u, c) {
            if (c > e && c > r && c > o && c > l || e > c && r > c && o > c && l > c)
                return 0;
            var h = f.cubicRootAt(e, r, o, l, c, y);
            if (0 === h)
                return 0;
            for (var d, p, m = 0, v = -1, g = 0; h > g; g++) {
                var _ = y[g]
                  , b = f.cubicAt(t, n, a, s, _);
                u > b || (0 > v && (v = f.cubicExtrema(e, r, o, l, x),
                x[1] < x[0] && v > 1 && i(),
                d = f.cubicAt(e, r, o, l, x[0]),
                v > 1 && (p = f.cubicAt(e, r, o, l, x[1]))),
                m += 2 == v ? _ < x[0] ? e > d ? 1 : -1 : _ < x[1] ? d > p ? 1 : -1 : p > l ? 1 : -1 : _ < x[0] ? e > d ? 1 : -1 : d > l ? 1 : -1)
            }
            return m
        }
        function r(t, e, i, n, r, a, o, s) {
            if (s > e && s > n && s > a || e > s && n > s && a > s)
                return 0;
            var l = f.quadraticRootAt(e, n, a, s, y);
            if (0 === l)
                return 0;
            var u = f.quadraticExtremum(e, n, a);
            if (u >= 0 && 1 >= u) {
                for (var c = 0, h = f.quadraticAt(e, n, a, u), d = 0; l > d; d++) {
                    var p = f.quadraticAt(t, i, r, y[d]);
                    p > o || (c += y[d] < u ? e > h ? 1 : -1 : h > a ? 1 : -1)
                }
                return c
            }
            var p = f.quadraticAt(t, i, r, y[0]);
            return p > o ? 0 : e > a ? 1 : -1
        }
        function a(t, e, i, n, r, a, o, s) {
            if (s -= e,
            s > i || -i > s)
                return 0;
            var l = Math.sqrt(i * i - s * s);
            y[0] = -l,
            y[1] = l;
            var u = Math.abs(n - r);
            if (1e-4 > u)
                return 0;
            if (1e-4 > u % v) {
                n = 0,
                r = v;
                var c = a ? 1 : -1;
                return o >= y[0] + t && o <= y[1] + t ? c : 0
            }
            if (a) {
                var l = n;
                n = d(r),
                r = d(l)
            } else
                n = d(n),
                r = d(r);
            n > r && (r += v);
            for (var h = 0, f = 0; 2 > f; f++) {
                var p = y[f];
                if (p + t > o) {
                    var m = Math.atan2(s, p)
                      , c = a ? 1 : -1;
                    0 > m && (m = v + m),
                    (m >= n && r >= m || m + v >= n && r >= m + v) && (m > Math.PI / 2 && m < 1.5 * Math.PI && (c = -c),
                    h += c)
                }
            }
            return h
        }
        function o(t, i, o, l, d) {
            for (var f = 0, v = 0, g = 0, y = 0, x = 0, _ = 0; _ < t[Ve]; ) {
                var b = t[_++];
                if (b === s.M && _ > 1 && (o || (f += p(v, g, y, x, l, d)),
                0 !== f))
                    return !0;
                switch (1 == _ && (v = t[_],
                g = t[_ + 1],
                y = v,
                x = g),
                b) {
                case s.M:
                    y = t[_++],
                    x = t[_++],
                    v = y,
                    g = x;
                    break;
                case s.L:
                    if (o) {
                        if (m(v, g, t[_], t[_ + 1], i, l, d))
                            return !0
                    } else
                        f += p(v, g, t[_], t[_ + 1], l, d) || 0;
                    v = t[_++],
                    g = t[_++];
                    break;
                case s.C:
                    if (o) {
                        if (u.containStroke(v, g, t[_++], t[_++], t[_++], t[_++], t[_], t[_ + 1], i, l, d))
                            return !0
                    } else
                        f += n(v, g, t[_++], t[_++], t[_++], t[_++], t[_], t[_ + 1], l, d) || 0;
                    v = t[_++],
                    g = t[_++];
                    break;
                case s.Q:
                    if (o) {
                        if (c.containStroke(v, g, t[_++], t[_++], t[_], t[_ + 1], i, l, d))
                            return !0
                    } else
                        f += r(v, g, t[_++], t[_++], t[_], t[_ + 1], l, d) || 0;
                    v = t[_++],
                    g = t[_++];
                    break;
                case s.A:
                    var w = t[_++]
                      , M = t[_++]
                      , S = t[_++]
                      , C = t[_++]
                      , T = t[_++]
                      , A = t[_++]
                      , z = (t[_++],
                    1 - t[_++])
                      , L = Math.cos(T) * S + w
                      , k = Math.sin(T) * C + M;
                    _ > 1 ? f += p(v, g, L, k, l, d) : (y = L,
                    x = k);
                    var P = (l - w) * C / S + w;
                    if (o) {
                        if (h.containStroke(w, M, C, T, T + A, z, i, P, d))
                            return !0
                    } else
                        f += a(w, M, C, T, T + A, z, P, d);
                    v = Math.cos(T + A) * S + w,
                    g = Math.sin(T + A) * C + M;
                    break;
                case s.R:
                    y = v = t[_++],
                    x = g = t[_++];
                    var D = t[_++]
                      , I = t[_++]
                      , L = y + D
                      , k = x + I;
                    if (o) {
                        if (m(y, x, L, x, i, l, d) || m(L, x, L, k, i, l, d) || m(L, k, y, k, i, l, d) || m(y, k, L, k, i, l, d))
                            return !0
                    } else
                        f += p(L, x, L, k, l, d),
                        f += p(y, k, y, x, l, d);
                    break;
                case s.Z:
                    if (o) {
                        if (m(v, g, y, x, i, l, d))
                            return !0
                    } else if (f += p(v, g, y, x, l, d),
                    0 !== f)
                        return !0;
                    v = y,
                    g = x
                }
            }
            return o || e(g, x) || (f += p(v, g, y, x, l, d) || 0),
            0 !== f
        }
        var s = t("../core/PathProxy").CMD
          , l = t("./line")
          , u = t("./cubic")
          , c = t("./quadratic")
          , h = t("./arc")
          , d = t("./util").normalizeRadian
          , f = t("../core/curve")
          , p = t("./windingLine")
          , m = l.containStroke
          , v = 2 * Math.PI
          , g = 1e-4
          , y = [-1, -1, -1]
          , x = [-1, -1];
        return {
            contain: function(t, e, i) {
                return o(t, 0, !1, e, i)
            },
            containStroke: function(t, e, i, n) {
                return o(t, e, !0, i, n)
            }
        }
    }),
    e("zrender/core/bbox", [li, "./vector", "./curve"], function(t) {
        var e = t("./vector")
          , i = t("./curve")
          , n = {}
          , r = Math.min
          , a = Math.max
          , o = Math.sin
          , s = Math.cos
          , l = e[J]()
          , u = e[J]()
          , c = e[J]()
          , h = 2 * Math.PI;
        return n.fromPoints = function(t, e, i) {
            if (0 !== t[Ve]) {
                var n, o = t[0], s = o[0], l = o[0], u = o[1], c = o[1];
                for (n = 1; n < t[Ve]; n++)
                    o = t[n],
                    s = r(s, o[0]),
                    l = a(l, o[0]),
                    u = r(u, o[1]),
                    c = a(c, o[1]);
                e[0] = s,
                e[1] = u,
                i[0] = l,
                i[1] = c
            }
        }
        ,
        n.fromLine = function(t, e, i, n, o, s) {
            o[0] = r(t, i),
            o[1] = r(e, n),
            s[0] = a(t, i),
            s[1] = a(e, n)
        }
        ,
        n.fromCubic = function(t, e, n, o, s, l, u, c, h, d) {
            var f, p, m, v, g, y = [], x = [], _ = i.cubicExtrema, b = i.cubicAt, w = _(t, n, s, u, y);
            for (g = 0; w > g; g++)
                y[g] = b(t, n, s, u, y[g]);
            for (w = _(e, o, l, c, x),
            g = 0; w > g; g++)
                x[g] = b(e, o, l, c, x[g]);
            y.push(t, u),
            x.push(e, c),
            f = r.apply(null, y),
            p = a.apply(null, y),
            m = r.apply(null, x),
            v = a.apply(null, x),
            h[0] = f,
            h[1] = m,
            d[0] = p,
            d[1] = v
        }
        ,
        n.fromQuadratic = function(t, e, n, o, s, l, u, c) {
            var h = i.quadraticExtremum
              , d = i.quadraticAt
              , f = a(r(h(t, n, s), 1), 0)
              , p = a(r(h(e, o, l), 1), 0)
              , m = d(t, n, s, f)
              , v = d(e, o, l, p);
            u[0] = r(t, s, m),
            u[1] = r(e, l, v),
            c[0] = a(t, s, m),
            c[1] = a(e, l, v)
        }
        ,
        n.fromArc = function(t, i, n, r, a, d, f, p, m) {
            var v = e.min
              , g = e.max
              , y = Math.abs(a - d);
            if (1e-4 > y % h && y > 1e-4)
                return p[0] = t - n,
                p[1] = i - r,
                m[0] = t + n,
                void (m[1] = i + r);
            if (l[0] = s(a) * n + t,
            l[1] = o(a) * r + i,
            u[0] = s(d) * n + t,
            u[1] = o(d) * r + i,
            v(p, l, u),
            g(m, l, u),
            a %= h,
            0 > a && (a += h),
            d %= h,
            0 > d && (d += h),
            a > d && !f ? d += h : d > a && f && (a += h),
            f) {
                var x = d;
                d = a,
                a = x
            }
            for (var _ = 0; d > _; _ += Math.PI / 2)
                _ > a && (c[0] = s(_) * n + t,
                c[1] = o(_) * r + i,
                v(p, c, p),
                g(m, c, m))
        }
        ,
        n
    }),
    e("zrender/core/curve", [li, "./vector"], function(t) {
        function e(t) {
            return t > -_ && _ > t
        }
        function i(t) {
            return t > _ || -_ > t
        }
        function n(t, e, i, n, r) {
            var a = 1 - r;
            return a * a * (a * t + 3 * r * e) + r * r * (r * n + 3 * a * i)
        }
        function r(t, e, i, n, r) {
            var a = 1 - r;
            return 3 * (((e - t) * a + 2 * (i - e) * r) * a + (n - i) * r * r)
        }
        function a(t, i, n, r, a, o) {
            var s = r + 3 * (i - n) - t
              , l = 3 * (n - 2 * i + t)
              , u = 3 * (i - t)
              , c = t - a
              , h = l * l - 3 * s * u
              , d = l * u - 9 * s * c
              , f = u * u - 3 * l * c
              , p = 0;
            if (e(h) && e(d))
                if (e(l))
                    o[0] = 0;
                else {
                    var m = -u / l;
                    m >= 0 && 1 >= m && (o[p++] = m)
                }
            else {
                var v = d * d - 4 * h * f;
                if (e(v)) {
                    var g = d / h
                      , m = -l / s + g
                      , _ = -g / 2;
                    m >= 0 && 1 >= m && (o[p++] = m),
                    _ >= 0 && 1 >= _ && (o[p++] = _)
                } else if (v > 0) {
                    var M = x(v)
                      , S = h * l + 1.5 * s * (-d + M)
                      , C = h * l + 1.5 * s * (-d - M);
                    S = 0 > S ? -y(-S, w) : y(S, w),
                    C = 0 > C ? -y(-C, w) : y(C, w);
                    var m = (-l - (S + C)) / (3 * s);
                    m >= 0 && 1 >= m && (o[p++] = m)
                } else {
                    var T = (2 * h * l - 3 * s * d) / (2 * x(h * h * h))
                      , A = Math.acos(T) / 3
                      , z = x(h)
                      , L = Math.cos(A)
                      , m = (-l - 2 * z * L) / (3 * s)
                      , _ = (-l + z * (L + b * Math.sin(A))) / (3 * s)
                      , k = (-l + z * (L - b * Math.sin(A))) / (3 * s);
                    m >= 0 && 1 >= m && (o[p++] = m),
                    _ >= 0 && 1 >= _ && (o[p++] = _),
                    k >= 0 && 1 >= k && (o[p++] = k)
                }
            }
            return p
        }
        function o(t, n, r, a, o) {
            var s = 6 * r - 12 * n + 6 * t
              , l = 9 * n + 3 * a - 3 * t - 9 * r
              , u = 3 * n - 3 * t
              , c = 0;
            if (e(l)) {
                if (i(s)) {
                    var h = -u / s;
                    h >= 0 && 1 >= h && (o[c++] = h)
                }
            } else {
                var d = s * s - 4 * l * u;
                if (e(d))
                    o[0] = -s / (2 * l);
                else if (d > 0) {
                    var f = x(d)
                      , h = (-s + f) / (2 * l)
                      , p = (-s - f) / (2 * l);
                    h >= 0 && 1 >= h && (o[c++] = h),
                    p >= 0 && 1 >= p && (o[c++] = p)
                }
            }
            return c
        }
        function s(t, e, i, n, r, a) {
            var o = (e - t) * r + t
              , s = (i - e) * r + e
              , l = (n - i) * r + i
              , u = (s - o) * r + o
              , c = (l - s) * r + s
              , h = (c - u) * r + u;
            a[0] = t,
            a[1] = o,
            a[2] = u,
            a[3] = h,
            a[4] = h,
            a[5] = c,
            a[6] = l,
            a[7] = n
        }
        function l(t, e, i, r, a, o, s, l, u, c, h) {
            var d, f, p, m, v, y = .005, b = 1 / 0;
            M[0] = u,
            M[1] = c;
            for (var w = 0; 1 > w; w += .05)
                S[0] = n(t, i, a, s, w),
                S[1] = n(e, r, o, l, w),
                m = g(M, S),
                b > m && (d = w,
                b = m);
            b = 1 / 0;
            for (var T = 0; 32 > T && !(_ > y); T++)
                f = d - y,
                p = d + y,
                S[0] = n(t, i, a, s, f),
                S[1] = n(e, r, o, l, f),
                m = g(S, M),
                f >= 0 && b > m ? (d = f,
                b = m) : (C[0] = n(t, i, a, s, p),
                C[1] = n(e, r, o, l, p),
                v = g(C, M),
                1 >= p && b > v ? (d = p,
                b = v) : y *= .5);
            return h && (h[0] = n(t, i, a, s, d),
            h[1] = n(e, r, o, l, d)),
            x(b)
        }
        function u(t, e, i, n) {
            var r = 1 - n;
            return r * (r * t + 2 * n * e) + n * n * i
        }
        function c(t, e, i, n) {
            return 2 * ((1 - n) * (e - t) + n * (i - e))
        }
        function h(t, n, r, a, o) {
            var s = t - 2 * n + r
              , l = 2 * (n - t)
              , u = t - a
              , c = 0;
            if (e(s)) {
                if (i(l)) {
                    var h = -u / l;
                    h >= 0 && 1 >= h && (o[c++] = h)
                }
            } else {
                var d = l * l - 4 * s * u;
                if (e(d)) {
                    var h = -l / (2 * s);
                    h >= 0 && 1 >= h && (o[c++] = h)
                } else if (d > 0) {
                    var f = x(d)
                      , h = (-l + f) / (2 * s)
                      , p = (-l - f) / (2 * s);
                    h >= 0 && 1 >= h && (o[c++] = h),
                    p >= 0 && 1 >= p && (o[c++] = p)
                }
            }
            return c
        }
        function d(t, e, i) {
            var n = t + i - 2 * e;
            return 0 === n ? .5 : (t - e) / n
        }
        function f(t, e, i, n, r) {
            var a = (e - t) * n + t
              , o = (i - e) * n + e
              , s = (o - a) * n + a;
            r[0] = t,
            r[1] = a,
            r[2] = s,
            r[3] = s,
            r[4] = o,
            r[5] = i
        }
        function p(t, e, i, n, r, a, o, s, l) {
            var c, h = .005, d = 1 / 0;
            M[0] = o,
            M[1] = s;
            for (var f = 0; 1 > f; f += .05) {
                S[0] = u(t, i, r, f),
                S[1] = u(e, n, a, f);
                var p = g(M, S);
                d > p && (c = f,
                d = p)
            }
            d = 1 / 0;
            for (var m = 0; 32 > m && !(_ > h); m++) {
                var v = c - h
                  , y = c + h;
                S[0] = u(t, i, r, v),
                S[1] = u(e, n, a, v);
                var p = g(S, M);
                if (v >= 0 && d > p)
                    c = v,
                    d = p;
                else {
                    C[0] = u(t, i, r, y),
                    C[1] = u(e, n, a, y);
                    var b = g(C, M);
                    1 >= y && d > b ? (c = y,
                    d = b) : h *= .5
                }
            }
            return l && (l[0] = u(t, i, r, c),
            l[1] = u(e, n, a, c)),
            x(d)
        }
        var m = t("./vector")
          , v = m[J]
          , g = m.distSquare
          , y = Math.pow
          , x = Math.sqrt
          , _ = 1e-4
          , b = x(3)
          , w = 1 / 3
          , M = v()
          , S = v()
          , C = v();
        return {
            cubicAt: n,
            cubicDerivativeAt: r,
            cubicRootAt: a,
            cubicExtrema: o,
            cubicSubdivide: s,
            cubicProjectPoint: l,
            quadraticAt: u,
            quadraticDerivativeAt: c,
            quadraticRootAt: h,
            quadraticExtremum: d,
            quadraticSubdivide: f,
            quadraticProjectPoint: p
        }
    }),
    e("zrender/graphic/Style", [li], function() {
        var t = ["lineCap", "lineJoin", "miterLimit", "shadowBlur", "shadowOffsetX", "shadowOffsetY", "shadowColor"]
          , e = function(t) {
            this.extendFrom(t)
        };
        e[ii] = {
            constructor: e,
            fill: "#000000",
            stroke: null,
            opacity: 1,
            lineDash: null,
            lineDashOffset: 0,
            shadowBlur: 0,
            shadowOffsetX: 0,
            shadowOffsetY: 0,
            lineWidth: 1,
            strokeNoScale: !1,
            text: null,
            textFill: "#000",
            textStroke: null,
            textPosition: "inside",
            textBaseline: null,
            textAlign: null,
            textDistance: 5,
            textShadowBlur: 0,
            textShadowOffsetX: 0,
            textShadowOffsetY: 0,
            bind: function(e, i) {
                for (var n = this.fill, r = this[N], a = 0; a < t[Ve]; a++) {
                    var o = t[a];
                    null != this[o] && (e[o] = this[o])
                }
                if (null != r) {
                    var s = this[G];
                    e[G] = s / (this.strokeNoScale && i && i.getLineScale ? i.getLineScale() : 1)
                }
                null != n && (e.fillStyle = n.canvasGradient ? n.canvasGradient : n),
                null != r && (e.strokeStyle = r.canvasGradient ? r.canvasGradient : r),
                null != this[ie] && (e.globalAlpha = this[ie])
            },
            extendFrom: function(t, e) {
                if (t) {
                    var i = this;
                    for (var n in t)
                        !t.hasOwnProperty(n) || !e && i.hasOwnProperty(n) || (i[n] = t[n])
                }
            },
            set: function(t, e) {
                typeof t === ei ? this[t] = e : this.extendFrom(t, !0)
            },
            clone: function() {
                var t = new this.constructor;
                return t.extendFrom(this, !0),
                t
            }
        };
        var i, n, r = e[ii];
        for (n = 0; n < t[Ve]; n++)
            i = t[n],
            i in r || (r[i] = null);
        return e
    }),
    e("zrender/Element", [li, "./core/guid", "./mixin/Eventful", "./mixin/Transformable", "./mixin/Animatable", "./core/util"], function(t) {
        var e = t("./core/guid")
          , i = t("./mixin/Eventful")
          , n = t("./mixin/Transformable")
          , r = t("./mixin/Animatable")
          , a = t("./core/util")
          , o = function(t) {
            n.call(this, t),
            i.call(this, t),
            r.call(this, t),
            this.id = t.id || e()
        };
        return o[ii] = {
            type: "element",
            name: "",
            __zr: null,
            ignore: !1,
            clipPath: null,
            drift: function(t, e) {
                switch (this.draggable) {
                case s:
                    e = 0;
                    break;
                case "vertical":
                    t = 0
                }
                var i = this[ai];
                i || (i = this[ai] = [1, 0, 0, 1, 0, 0]),
                i[4] += t,
                i[5] += e,
                this.decomposeTransform(),
                this.dirty()
            },
            beforeUpdate: function() {},
            afterUpdate: function() {},
            update: function() {
                this.updateTransform()
            },
            traverse: function() {},
            attrKV: function(t, e) {
                if (t === re || "scale" === t || "origin" === t) {
                    if (e) {
                        var i = this[t];
                        i || (i = this[t] = []),
                        i[0] = e[0],
                        i[1] = e[1]
                    }
                } else
                    this[t] = e
            },
            hide: function() {
                this[qe] = !0,
                this.__zr && this.__zr.refresh()
            },
            show: function() {
                this[qe] = !1,
                this.__zr && this.__zr.refresh()
            },
            attr: function(t, e) {
                if (typeof t === ei)
                    this.attrKV(t, e);
                else if (a[Ge](t))
                    for (var i in t)
                        t.hasOwnProperty(i) && this.attrKV(i, t[i]);
                return this.dirty(),
                this
            },
            setClipPath: function(t) {
                var e = this.__zr;
                e && t.addSelfToZr(e),
                this.clipPath && this.clipPath !== t && this.removeClipPath(),
                this.clipPath = t,
                t.__zr = e,
                t.__clipTarget = this,
                this.dirty()
            },
            removeClipPath: function() {
                var t = this.clipPath;
                t && (t.__zr && t.removeSelfFromZr(t.__zr),
                t.__zr = null,
                t.__clipTarget = null,
                this.clipPath = null,
                this.dirty())
            },
            addSelfToZr: function(t) {
                this.__zr = t;
                var e = this.animators;
                if (e)
                    for (var i = 0; i < e[Ve]; i++)
                        t.animation.addAnimator(e[i]);
                this.clipPath && this.clipPath.addSelfToZr(t)
            },
            removeSelfFromZr: function(t) {
                this.__zr = null;
                var e = this.animators;
                if (e)
                    for (var i = 0; i < e[Ve]; i++)
                        t.animation.removeAnimator(e[i]);
                this.clipPath && this.clipPath.removeSelfFromZr(t)
            }
        },
        a.mixin(o, r),
        a.mixin(o, n),
        a.mixin(o, i),
        o
    }),
    e("echarts/model/mixin/makeStyleMapper", [li, si], function(t) {
        var e = t(si);
        return function(t) {
            for (var i = 0; i < t[Ve]; i++)
                t[i][1] || (t[i][1] = t[i][0]);
            return function(i) {
                for (var n = {}, r = 0; r < t[Ve]; r++) {
                    var a = t[r][1];
                    if (!(i && e[_e](i, a) >= 0)) {
                        var o = this[V](a);
                        null != o && (n[t[r][0]] = o)
                    }
                }
                return n
            }
        }
    }),
    e("echarts/scale/Ordinal", [li, si, "./Scale"], function(t) {
        var e = t(si)
          , i = t("./Scale")
          , n = i[ii]
          , r = i[Ze]({
            type: "ordinal",
            init: function(t, e) {
                this._data = t,
                this._extent = e || [0, t[Ve] - 1]
            },
            parse: function(t) {
                return typeof t === ei ? e[_e](this._data, t) : Math.round(t)
            },
            contain: function(t) {
                return t = this.parse(t),
                n[te].call(this, t) && null != this._data[t]
            },
            normalize: function(t) {
                return n.normalize.call(this, this.parse(t))
            },
            scale: function(t) {
                return Math.round(n.scale.call(this, t))
            },
            getTicks: function() {
                for (var t = [], e = this._extent, i = e[0]; i <= e[1]; )
                    t.push(i),
                    i++;
                return t
            },
            getLabel: function(t) {
                return this._data[t]
            },
            count: function() {
                return this._extent[1] - this._extent[0] + 1
            },
            niceTicks: e.noop,
            niceExtent: e.noop
        });
        return r[J] = function() {
            return new r
        }
        ,
        r
    }),
    e("zrender/core/guid", [], function() {
        var t = 2311;
        return function() {
            return "zr_" + t++
        }
    }),
    e("zrender/mixin/Animatable", [li, "../animation/Animator", k, "../core/log"], function(t) {
        var e = t("../animation/Animator")
          , i = t(k)
          , n = i[me]
          , r = i.isFunction
          , a = i[Ge]
          , o = t("../core/log")
          , s = function() {
            this.animators = []
        };
        return s[ii] = {
            constructor: s,
            animate: function(t, n) {
                var r, a = !1, s = this, l = this.__zr;
                if (t) {
                    var u = t.split(".")
                      , c = s;
                    a = "shape" === u[0];
                    for (var h = 0, d = u[Ve]; d > h; h++)
                        c && (c = c[u[h]]);
                    c && (r = c)
                } else
                    r = s;
                if (!r)
                    return void o('Property "' + t + '" is not existed in element ' + s.id);
                var f = s.animators
                  , p = new e(r,n);
                return p.during(function() {
                    s.dirty(a)
                }).done(function() {
                    f.splice(i[_e](f, p), 1)
                }),
                f.push(p),
                l && l.animation.addAnimator(p),
                p
            },
            stopAnimation: function(t) {
                for (var e = this.animators, i = e[Ve], n = 0; i > n; n++)
                    e[n].stop(t);
                return e[Ve] = 0,
                this
            },
            animateTo: function(t, e, i, a, o) {
                function s() {
                    u--,
                    u || o && o()
                }
                n(i) ? (o = a,
                a = i,
                i = 0) : r(a) ? (o = a,
                a = "linear",
                i = 0) : r(i) ? (o = i,
                i = 0) : r(e) ? (o = e,
                e = 500) : e || (e = 500),
                this.stopAnimation(),
                this._animateToShallow("", this, t, e, i, a, o);
                var l = this.animators.slice()
                  , u = l[Ve];
                u || o && o();
                for (var c = 0; c < l[Ve]; c++)
                    l[c].done(s).start(a)
            },
            _animateToShallow: function(t, e, n, r, o) {
                var s = {}
                  , l = 0;
                for (var u in n)
                    if (null != e[u])
                        a(n[u]) && !i.isArrayLike(n[u]) ? this._animateToShallow(t ? t + "." + u : u, e[u], n[u], r, o) : (s[u] = n[u],
                        l++);
                    else if (null != n[u])
                        if (t) {
                            var c = {};
                            c[t] = {},
                            c[t][u] = n[u],
                            this.attr(c)
                        } else
                            this.attr(u, n[u]);
                return l > 0 && this.animate(t, !1).when(null == r ? 500 : r, s).delay(o || 0),
                this
            }
        },
        s
    }),
    e("echarts/data/List", [li, "../model/Model", "./DataDiffer", si, "../util/model"], function(t) {
        function e(t) {
            return u[be](t) || (t = [t]),
            t
        }
        var i = L
          , n = typeof window === L ? global : window
          , r = typeof n.Float64Array === i ? Array : n.Float64Array
          , a = typeof n.Int32Array === i ? Array : n.Int32Array
          , o = {
            "float": r,
            "int": a,
            ordinal: Array,
            number: Array,
            time: Array
        }
          , s = t("../model/Model")
          , l = t("./DataDiffer")
          , u = t(si)
          , c = t("../util/model")
          , d = u[Ge]
          , f = ["stackedOn", "_nameList", "_idList", "_rawData"]
          , m = function(t, e, i) {
            u.each(f[H](i || []), function(i) {
                e.hasOwnProperty(i) && (t[i] = e[i])
            })
        }
          , v = function(t, e) {
            t = t || ["x", "y"];
            for (var i = {}, n = [], r = 0; r < t[Ve]; r++) {
                var a, o = {};
                typeof t[r] === ei ? (a = t[r],
                o = {
                    name: a,
                    stackable: !1,
                    type: "number"
                }) : (o = t[r],
                a = o.name,
                o.type = o.type || ge),
                n.push(a),
                i[a] = o
            }
            this[U] = n,
            this._dimensionInfos = i,
            this[Ae] = e,
            this.indices = [],
            this._storage = {},
            this._nameList = [],
            this._idList = [],
            this._optionModels = [],
            this.stackedOn = null,
            this._visual = {},
            this._layout = {},
            this._itemVisuals = [],
            this._itemLayouts = [],
            this._graphicEls = [],
            this._rawData,
            this._extent
        }
          , g = v[ii];
        g.type = "list",
        g.getDimension = function(t) {
            return isNaN(t) || (t = this[U][t] || t),
            t
        }
        ,
        g.getDimensionInfo = function(t) {
            return u.clone(this._dimensionInfos[this.getDimension(t)])
        }
        ,
        g.initData = function(t, e, i) {
            t = t || [],
            this._rawData = t;
            var n = this._storage = {}
              , r = this.indices = []
              , a = this[U]
              , s = t[Ve]
              , l = this._dimensionInfos
              , h = []
              , d = {};
            e = e || [];
            for (var f = 0; f < a[Ve]; f++) {
                var p = l[a[f]]
                  , m = o[p.type];
                n[a[f]] = new m(s)
            }
            i = i || function(t, e, i, n) {
                var r = c.getDataItemValue(t);
                return c.converDataValue(u[be](r) ? r[n] : r, l[e])
            }
            ;
            for (var v = 0; v < t[Ve]; v++) {
                for (var g = t[v], y = 0; y < a[Ve]; y++) {
                    var x = a[y]
                      , _ = n[x];
                    _[v] = i(g, x, v, y)
                }
                r.push(v)
            }
            for (var f = 0; f < t[Ve]; f++) {
                var b = "";
                e[f] || (e[f] = t[f].name,
                b = t[f].id);
                var w = e[f] || "";
                !b && w && (d[w] = d[w] || 0,
                b = w,
                d[w] > 0 && (b += "__ec__" + d[w]),
                d[w]++),
                b && (h[f] = b)
            }
            this._nameList = e,
            this._idList = h
        }
        ,
        g.count = function() {
            return this.indices[Ve]
        }
        ,
        g.get = function(t, e, i) {
            var n = this._storage
              , r = this.indices[e]
              , a = n[t] && n[t][r];
            if (i) {
                var o = this._dimensionInfos[t];
                if (o && o.stackable)
                    for (var s = this.stackedOn; s; ) {
                        var l = s.get(t, e);
                        (a >= 0 && l > 0 || 0 >= a && 0 > l) && (a += l),
                        s = s.stackedOn
                    }
            }
            return a
        }
        ,
        g.getValues = function(t, e, i) {
            var n = [];
            u[be](t) || (i = e,
            e = t,
            t = this[U]);
            for (var r = 0, a = t[Ve]; a > r; r++)
                n.push(this.get(t[r], e, i));
            return n
        }
        ,
        g.hasValue = function(t) {
            for (var e = this[U], i = this._dimensionInfos, n = 0, r = e[Ve]; r > n; n++)
                if (i[e[n]].type !== y && isNaN(this.get(e[n], t)))
                    return !1;
            return !0
        }
        ,
        g.getDataExtent = function(t, e) {
            var i = this._storage[t]
              , n = this.getDimensionInfo(t);
            e = n && n.stackable && e;
            var r, a = (this._extent || (this._extent = {}))[t + !!e];
            if (a)
                return a;
            if (i) {
                for (var o = 1 / 0, s = -1 / 0, l = 0, u = this.count(); u > l; l++)
                    r = this.get(t, l, e),
                    o > r && (o = r),
                    r > s && (s = r);
                return this._extent[t + e] = [o, s]
            }
            return [1 / 0, -1 / 0]
        }
        ,
        g.getSum = function(t, e) {
            var i = this._storage[t]
              , n = 0;
            if (i)
                for (var r = 0, a = this.count(); a > r; r++) {
                    var o = this.get(t, r, e);
                    isNaN(o) || (n += o)
                }
            return n
        }
        ,
        g[_e] = function(t, e) {
            var i = this._storage
              , n = i[t]
              , r = this.indices;
            if (n)
                for (var a = 0, o = r[Ve]; o > a; a++) {
                    var s = r[a];
                    if (n[s] === e)
                        return a
                }
            return -1
        }
        ,
        g.indexOfName = function(t) {
            for (var e = this.indices, i = this._nameList, n = 0, r = e[Ve]; r > n; n++) {
                var a = e[n];
                if (i[a] === t)
                    return n
            }
            return -1
        }
        ,
        g.indexOfNearest = function(t, e, i) {
            u[be](t) || (t = t ? [t] : []);
            var n = this._storage
              , r = n[t];
            if (r) {
                for (var a = Number.MAX_VALUE, o = -1, s = 0, l = t[Ve]; l > s; s++)
                    for (var c = 0, h = this.count(); h > c; c++) {
                        var d = Math.abs(this.get(t[s], c, i) - e);
                        a >= d && (a = d,
                        o = c)
                    }
                return o
            }
            return -1
        }
        ,
        g.getRawIndex = function(t) {
            var e = this.indices[t];
            return null == e ? -1 : e
        }
        ,
        g[j] = function(t) {
            return this._nameList[this.indices[t]] || ""
        }
        ,
        g.getId = function(t) {
            return this._idList[this.indices[t]] || this.getRawIndex(t) + ""
        }
        ,
        g.each = function(t, i, n, r) {
            typeof t === xe && (r = n,
            n = i,
            i = t,
            t = []),
            t = u.map(e(t), this.getDimension, this);
            var a = []
              , o = t[Ve]
              , s = this.indices;
            r = r || this;
            for (var l = 0; l < s[Ve]; l++)
                if (0 === o)
                    i.call(r, l);
                else if (1 === o)
                    i.call(r, this.get(t[0], l, n), l);
                else {
                    for (var c = 0; o > c; c++)
                        a[c] = this.get(t[c], l, n);
                    a[c] = l,
                    i.apply(r, a)
                }
        }
        ,
        g.filterSelf = function(t, i, n, r) {
            typeof t === xe && (r = n,
            n = i,
            i = t,
            t = []),
            t = u.map(e(t), this.getDimension, this);
            var a = []
              , o = []
              , s = t[Ve]
              , l = this.indices;
            r = r || this;
            for (var c = 0; c < l[Ve]; c++) {
                var h;
                if (1 === s)
                    h = i.call(r, this.get(t[0], c, n), c);
                else {
                    for (var d = 0; s > d; d++)
                        o[d] = this.get(t[d], c, n);
                    o[d] = c,
                    h = i.apply(r, o)
                }
                h && a.push(l[c])
            }
            return this.indices = a,
            this._extent = {},
            this
        }
        ,
        g[h] = function(t, e, i, n) {
            typeof t === xe && (n = i,
            i = e,
            e = t,
            t = []);
            var r = [];
            return this.each(t, function() {
                r.push(e && e.apply(this, arguments))
            }, i, n),
            r
        }
        ,
        g.map = function(t, i, n, r) {
            t = u.map(e(t), this.getDimension, this);
            var a = this[U]
              , o = new v(u.map(a, this.getDimensionInfo, this),this[Ae])
              , s = o.indices = this.indices;
            m(o, this, this._wrappedMethods);
            for (var l = o._storage = {}, c = this._storage, h = 0; h < a[Ve]; h++) {
                var d = a[h]
                  , f = c[d];
                l[d] = u[_e](t, d) >= 0 ? new f.constructor(c[d][Ve]) : c[d]
            }
            var p = [];
            return this.each(t, function() {
                var e = arguments[arguments[Ve] - 1]
                  , n = i && i.apply(this, arguments);
                if (null != n) {
                    typeof n === ge && (p[0] = n,
                    n = p);
                    for (var r = 0; r < n[Ve]; r++) {
                        var a = t[r]
                          , o = l[a]
                          , u = s[e];
                        o && (o[u] = n[r])
                    }
                }
            }, n, r),
            o
        }
        ,
        g[T] = function(t) {
            var e = this[Ae];
            return t = this.indices[t],
            new s(this._rawData[t],e,e[q])
        }
        ,
        g.diff = function(t) {
            var e = this._idList
              , i = t && t._idList;
            return new l(t ? t.indices : [],this.indices,function(t) {
                return i[t] || t + ""
            }
            ,function(t) {
                return e[t] || t + ""
            }
            )
        }
        ,
        g.getVisual = function(t) {
            var e = this._visual;
            return e && e[t]
        }
        ,
        g.setVisual = function(t, e) {
            if (d(t))
                for (var i in t)
                    t.hasOwnProperty(i) && this.setVisual(i, t[i]);
            else
                this._visual = this._visual || {},
                this._visual[t] = e
        }
        ,
        g.setLayout = function(t, e) {
            if (d(t))
                for (var i in t)
                    t.hasOwnProperty(i) && this.setLayout(i, t[i]);
            else
                this._layout[t] = e
        }
        ,
        g.getLayout = function(t) {
            return this._layout[t]
        }
        ,
        g.getItemLayout = function(t) {
            return this._itemLayouts[t]
        }
        ,
        g.setItemLayout = function(t, e, i) {
            this._itemLayouts[t] = i ? u[Ze](this._itemLayouts[t] || {}, e) : e
        }
        ,
        g[p] = function(t, e, i) {
            var n = this._itemVisuals[t]
              , r = n && n[e];
            return null != r || i ? r : this.getVisual(e)
        }
        ,
        g[A] = function(t, e, i) {
            var n = this._itemVisuals[t] || {};
            if (this._itemVisuals[t] = n,
            d(e))
                for (var r in e)
                    e.hasOwnProperty(r) && (n[r] = e[r]);
            else
                n[e] = i
        }
        ;
        var x = function(t) {
            t[Te] = this[Te],
            t.dataIndex = this.dataIndex
        };
        return g.setItemGraphicEl = function(t, e) {
            var i = this[Ae];
            e && (e.dataIndex = t,
            e[Te] = i && i[Te],
            "group" === e.type && e[Me](x, e)),
            this._graphicEls[t] = e
        }
        ,
        g[O] = function(t) {
            return this._graphicEls[t]
        }
        ,
        g[I] = function(t, e) {
            u.each(this._graphicEls, function(i, n) {
                i && t && t.call(e, i, n)
            })
        }
        ,
        g.cloneShallow = function() {
            var t = u.map(this[U], this.getDimensionInfo, this)
              , e = new v(t,this[Ae]);
            return e._storage = this._storage,
            m(e, this, this._wrappedMethods),
            e.indices = this.indices.slice(),
            e
        }
        ,
        g.wrapMethod = function(t, e) {
            var i = this[t];
            typeof i === xe && (this._wrappedMethods = this._wrappedMethods || [],
            this._wrappedMethods.push(t),
            this[t] = function() {
                var t = i.apply(this, arguments);
                return e.call(this, t)
            }
            )
        }
        ,
        v
    }),
    e("echarts/data/helper/completeDimensions", [li, si], function(t) {
        function e(t, e, a) {
            if (!e)
                return t;
            var o = n(e[0])
              , s = r[be](o) && o[Ve] || 1;
            a = a || [];
            for (var l = 0; s > l; l++)
                if (!t[l]) {
                    var u = a[l] || "extra" + (l - a[Ve]);
                    t[l] = i(e, l) ? {
                        type: "ordinal",
                        name: u
                    } : u
                }
            return t
        }
        function i(t, e) {
            for (var i = 0, a = t[Ve]; a > i; i++) {
                var o = n(t[i]);
                if (!r[be](o))
                    return !1;
                var o = o[e];
                if (null != o && isFinite(o))
                    return !1;
                if (r[me](o) && "-" !== o)
                    return !0
            }
            return !1
        }
        function n(t) {
            return r[be](t) ? t : r[Ge](t) ? t.value : t
        }
        var r = t(si);
        return e
    }),
    e("zrender/mixin/Transformable", [li, "../core/matrix", "../core/vector"], function(t) {
        function e(t) {
            return t > a || -a > t
        }
        var i = t("../core/matrix")
          , n = t("../core/vector")
          , r = i.identity
          , a = 5e-5
          , o = function(t) {
            t = t || {},
            t[re] || (this[re] = [0, 0]),
            null == t.rotation && (this.rotation = 0),
            t.scale || (this.scale = [1, 1]),
            this.origin = this.origin || null
        }
          , s = o[ii];
        s[ai] = null,
        s.needLocalTransform = function() {
            return e(this.rotation) || e(this[re][0]) || e(this[re][1]) || e(this.scale[0] - 1) || e(this.scale[1] - 1)
        }
        ,
        s.updateTransform = function() {
            var t = this[R]
              , e = t && t[ai]
              , n = this.needLocalTransform()
              , a = this[ai];
            return n || e ? (a = a || i[J](),
            n ? this.getLocalTransform(a) : r(a),
            e && (n ? i.mul(a, t[ai], a) : i.copy(a, t[ai])),
            this[ai] = a,
            this.invTransform = this.invTransform || i[J](),
            void i.invert(this.invTransform, a)) : void (a && r(a))
        }
        ,
        s.getLocalTransform = function(t) {
            t = t || [],
            r(t);
            var e = this.origin
              , n = this.scale
              , a = this.rotation
              , o = this[re];
            return e && (t[4] -= e[0],
            t[5] -= e[1]),
            i.scale(t, t, n),
            a && i.rotate(t, t, a),
            e && (t[4] += e[0],
            t[5] += e[1]),
            t[4] += o[0],
            t[5] += o[1],
            t
        }
        ,
        s.setTransform = function(t) {
            var e = this[ai];
            e && t[ai](e[0], e[1], e[2], e[3], e[4], e[5])
        }
        ;
        var l = [];
        return s.decomposeTransform = function() {
            if (this[ai]) {
                var t = this[R]
                  , n = this[ai];
                t && t[ai] && (i.mul(l, t.invTransform, n),
                n = l);
                var r = n[0] * n[0] + n[1] * n[1]
                  , a = n[2] * n[2] + n[3] * n[3]
                  , o = this[re]
                  , s = this.scale;
                e(r - 1) && (r = Math.sqrt(r)),
                e(a - 1) && (a = Math.sqrt(a)),
                n[0] < 0 && (r = -r),
                n[3] < 0 && (a = -a),
                o[0] = n[4],
                o[1] = n[5],
                s[0] = r,
                s[1] = a,
                this.rotation = Math.atan2(-n[1] / a, n[0] / r)
            }
        }
        ,
        s.transformCoordToLocal = function(t, e) {
            var i = [t, e]
              , r = this.invTransform;
            return r && n[F](i, i, r),
            i
        }
        ,
        s.transformCoordToGlobal = function(t, e) {
            var i = [t, e]
              , r = this[ai];
            return r && n[F](i, i, r),
            i
        }
        ,
        o
    }),
    e("echarts/component/dataZoom/AxisProxy", [li, si, r, "../../coord/axisHelper"], function(t) {
        function e(t, e) {
            var i = [1 / 0, -1 / 0];
            return s(e, function(e) {
                var n = e[Pe]();
                n && s(e.getDimensionsOnAxis(t), function(t) {
                    var e = n.getDataExtent(t);
                    e[0] < i[0] && (i[0] = e[0]),
                    e[1] > i[1] && (i[1] = e[1])
                })
            }, this),
            i
        }
        function i(t, e, i) {
            var n = [0, 100]
              , r = [t.start, t.end]
              , u = o.createScaleByModel(i)
              , c = [];
            return s(["startValue", "endValue"], function(e) {
                c.push(null != t[e] ? u.parse(t[e]) : null)
            }),
            s([0, 1], function(t) {
                var i = c[t]
                  , o = r[t];
                null != o || null == i ? (null == o && (o = n[t]),
                i = u.parse(a[C](o, n, e, !0))) : o = a[C](i, e, n, !0),
                c[t] = i,
                r[t] = o
            }),
            {
                valueWindow: l(c),
                percentWindow: l(r)
            }
        }
        var n = t(si)
          , a = t(r)
          , o = t("../../coord/axisHelper")
          , s = n.each
          , l = a.asc
          , u = function(t, e, i, n) {
            this._dimName = t,
            this._axisIndex = e,
            this._backup,
            this._valueWindow,
            this._percentWindow,
            this._dataExtent,
            this[q] = n,
            this._model = i
        };
        return u[ii] = {
            constructor: u,
            hostedBy: function(t) {
                return this._model === t
            },
            backup: function(t, e) {
                t === this._model && (this._backup = e)
            },
            getBackup: function() {
                return n.clone(this._backup)
            },
            getDataExtent: function() {
                return this._dataExtent.slice()
            },
            getDataValueWindow: function() {
                return this._valueWindow.slice()
            },
            getDataPercentWindow: function() {
                return this._percentWindow.slice()
            },
            getTargetSeriesModels: function() {
                var t = [];
                return this[q][Oe](function(e) {
                    this._axisIndex === e.get(this._dimName + "AxisIndex") && t.push(e)
                }, this),
                t
            },
            getAxisModel: function() {
                return this[q][W](this._dimName + "Axis", this._axisIndex)
            },
            getOtherAxisModel: function() {
                var t, e, i = this._dimName, n = this[q], r = this.getAxisModel(), a = "x" === i || "y" === i;
                a ? (e = "gridIndex",
                t = "x" === i ? "y" : "x") : (e = "polarIndex",
                t = "angle" === i ? d : "angle");
                var o;
                return n[je](t + "Axis", function(t) {
                    (t.get(e) || 0) === (r.get(e) || 0) && (o = t)
                }),
                o
            },
            reset: function(t) {
                if (t === this._model) {
                    var n = t[Ke]
                      , r = this._dimName
                      , a = this.getAxisModel()
                      , o = this.getTargetSeriesModels()
                      , s = e(r, o)
                      , l = i(n, s, a);
                    this._dataExtent = s.slice(),
                    this._valueWindow = l.valueWindow.slice(),
                    this._percentWindow = l.percentWindow.slice()
                }
            },
            filterData: function(t) {
                function e(t) {
                    return t >= a[0] && t <= a[1]
                }
                if (t === this._model) {
                    var i = this._dimName
                      , n = this.getTargetSeriesModels()
                      , r = t.get("filterMode")
                      , a = this._valueWindow
                      , o = this.getOtherAxisModel();
                    t.get("$fromToolbox") && o && o.get("type") === x && (r = "empty"),
                    s(n, function(t) {
                        var n = t[Pe]();
                        n && s(t.getDimensionsOnAxis(i), function(i) {
                            "empty" === r ? t.setData(n.map(i, function(t) {
                                return e(t) ? t : 0 / 0
                            })) : n.filterSelf(i, e)
                        })
                    })
                }
            }
        },
        u
    }),
    e("echarts/coord/cartesian/Cartesian", [li, si], function(t) {
        function e(t) {
            return this._axes[t]
        }
        var i = t(si)
          , n = function(t) {
            this._axes = {},
            this._dimList = [],
            this.name = t || ""
        };
        return n[ii] = {
            constructor: n,
            type: "cartesian",
            getAxis: function(t) {
                return this._axes[t]
            },
            getAxes: function() {
                return i.map(this._dimList, e, this)
            },
            getAxesByScale: function(t) {
                return t = t[ni](),
                i[ri](this.getAxes(), function(e) {
                    return e.scale.type === t
                })
            },
            addAxis: function(t) {
                var e = t.dim;
                this._axes[e] = t,
                this._dimList.push(e)
            },
            dataToCoord: function(t) {
                return this._dataCoordConvert(t, f)
            },
            coordToData: function(t) {
                return this._dataCoordConvert(t, "coordToData")
            },
            _dataCoordConvert: function(t, e) {
                for (var i = this._dimList, n = t instanceof Array ? [] : {}, r = 0; r < i[Ve]; r++) {
                    var a = i[r]
                      , o = this._axes[a];
                    n[a] = o[e](t[a])
                }
                return n
            }
        },
        n
    }),
    e("echarts/data/DataDiffer", [li], function() {
        function t(t) {
            return t
        }
        function e(e, i, n, r) {
            this._old = e,
            this._new = i,
            this._oldKeyGetter = n || t,
            this._newKeyGetter = r || t
        }
        function i(t, e, i) {
            for (var n = 0; n < t[Ve]; n++) {
                var r = i(t[n])
                  , a = e[r];
                null == a ? e[r] = n : (a[Ve] || (e[r] = a = [a]),
                a.push(n))
            }
        }
        return e[ii] = {
            constructor: e,
            add: function(t) {
                return this._add = t,
                this
            },
            update: function(t) {
                return this._update = t,
                this
            },
            remove: function(t) {
                return this._remove = t,
                this
            },
            execute: function() {
                var t, e = this._old, n = this._new, r = this._oldKeyGetter, a = this._newKeyGetter, o = {}, s = {};
                for (i(e, o, r),
                i(n, s, a),
                t = 0; t < e[Ve]; t++) {
                    var l = r(e[t])
                      , u = s[l];
                    if (null != u) {
                        var c = u[Ve];
                        c ? (1 === c && (s[l] = null),
                        u = u.unshift()) : s[l] = null,
                        this._update && this._update(u, t)
                    } else
                        this._remove && this._remove(t)
                }
                for (var l in s)
                    if (s.hasOwnProperty(l)) {
                        var u = s[l];
                        if (null == u)
                            continue;
                        if (u[Ve])
                            for (var t = 0, c = u[Ve]; c > t; t++)
                                this._add && this._add(u[t]);
                        else
                            this._add && this._add(u)
                    }
            }
        },
        e
    }),
    e("zrender/animation/Animator", [li, "./Clip", "../tool/color", k], function(t) {
        function e(t, e) {
            return t[e]
        }
        function i(t, e, i) {
            t[e] = i
        }
        function n(t, e, i) {
            return (e - t) * i + t
        }
        function r(t, e, i) {
            return i > .5 ? e : t
        }
        function a(t, e, i, r, a) {
            var o = t[Ve];
            if (1 == a)
                for (var s = 0; o > s; s++)
                    r[s] = n(t[s], e[s], i);
            else
                for (var l = t[0][Ve], s = 0; o > s; s++)
                    for (var u = 0; l > u; u++)
                        r[s][u] = n(t[s][u], e[s][u], i)
        }
        function o(t, e, i) {
            var n = t[Ve]
              , r = e[Ve];
            if (n !== r) {
                var a = n > r;
                if (a)
                    t[Ve] = r;
                else
                    for (var o = n; r > o; o++)
                        t.push(1 === i ? e[o] : g.call(e[o]))
            }
        }
        function s(t, e, i) {
            if (t === e)
                return !0;
            var n = t[Ve];
            if (n !== e[Ve])
                return !1;
            if (1 === i) {
                for (var r = 0; n > r; r++)
                    if (t[r] !== e[r])
                        return !1
            } else
                for (var a = t[0][Ve], r = 0; n > r; r++)
                    for (var o = 0; a > o; o++)
                        if (t[r][o] !== e[r][o])
                            return !1;
            return !0
        }
        function l(t, e, i, n, r, a, o, s, l) {
            var c = t[Ve];
            if (1 == l)
                for (var h = 0; c > h; h++)
                    s[h] = u(t[h], e[h], i[h], n[h], r, a, o);
            else
                for (var d = t[0][Ve], h = 0; c > h; h++)
                    for (var f = 0; d > f; f++)
                        s[h][f] = u(t[h][f], e[h][f], i[h][f], n[h][f], r, a, o)
        }
        function u(t, e, i, n, r, a, o) {
            var s = .5 * (i - t)
              , l = .5 * (n - e);
            return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e
        }
        function c(t) {
            if (v(t)) {
                var e = t[Ve];
                if (v(t[0])) {
                    for (var i = [], n = 0; e > n; n++)
                        i.push(g.call(t[n]));
                    return i
                }
                return g.call(t)
            }
            return t
        }
        function h(t) {
            return t[0] = Math.floor(t[0]),
            t[1] = Math.floor(t[1]),
            t[2] = Math.floor(t[2]),
            "rgba(" + t.join(",") + ")"
        }
        function d(t, e, i, c, d) {
            var m = t._getter
              , g = t._setter
              , y = "spline" === e
              , x = c[Ve];
            if (x) {
                var _, b = c[0].value, w = v(b), M = !1, S = !1, C = w && v(b[0]) ? 2 : 1;
                c.sort(function(t, e) {
                    return t.time - e.time
                }),
                _ = c[x - 1].time;
                for (var T = [], A = [], z = c[0].value, L = !0, k = 0; x > k; k++) {
                    T.push(c[k].time / _);
                    var P = c[k].value;
                    if (w && s(P, z, C) || !w && P === z || (L = !1),
                    z = P,
                    typeof P == ei) {
                        var D = p.parse(P);
                        D ? (P = D,
                        M = !0) : S = !0
                    }
                    A.push(P)
                }
                if (!L) {
                    if (w) {
                        for (var I = A[x - 1], k = 0; x - 1 > k; k++)
                            o(A[k], I, C);
                        o(m(t._target, d), I, C)
                    }
                    var O, R, V, B, E, Z, N = 0, G = 0;
                    if (M)
                        var F = [0, 0, 0, 0];
                    var H = function(t, e) {
                        var i;
                        if (G > e) {
                            for (O = Math.min(N + 1, x - 1),
                            i = O; i >= 0 && !(T[i] <= e); i--)
                                ;
                            i = Math.min(i, x - 2)
                        } else {
                            for (i = N; x > i && !(T[i] > e); i++)
                                ;
                            i = Math.min(i - 1, x - 2)
                        }
                        N = i,
                        G = e;
                        var o = T[i + 1] - T[i];
                        if (0 !== o)
                            if (R = (e - T[i]) / o,
                            y)
                                if (B = A[i],
                                V = A[0 === i ? i : i - 1],
                                E = A[i > x - 2 ? x - 1 : i + 1],
                                Z = A[i > x - 3 ? x - 1 : i + 2],
                                w)
                                    l(V, B, E, Z, R, R * R, R * R * R, m(t, d), C);
                                else {
                                    var s;
                                    if (M)
                                        s = l(V, B, E, Z, R, R * R, R * R * R, F, 1),
                                        s = h(F);
                                    else {
                                        if (S)
                                            return r(B, E, R);
                                        s = u(V, B, E, Z, R, R * R, R * R * R)
                                    }
                                    g(t, d, s)
                                }
                            else if (w)
                                a(A[i], A[i + 1], R, m(t, d), C);
                            else {
                                var s;
                                if (M)
                                    a(A[i], A[i + 1], R, F, 1),
                                    s = h(F);
                                else {
                                    if (S)
                                        return r(A[i], A[i + 1], R);
                                    s = n(A[i], A[i + 1], R)
                                }
                                g(t, d, s)
                            }
                    }
                      , W = new f({
                        target: t._target,
                        life: _,
                        loop: t._loop,
                        delay: t._delay,
                        onframe: H,
                        ondestroy: i
                    });
                    return e && "spline" !== e && (W.easing = e),
                    W
                }
            }
        }
        var f = t("./Clip")
          , p = t("../tool/color")
          , m = t(k)
          , v = m.isArrayLike
          , g = Array[ii].slice
          , y = function(t, n, r, a) {
            this._tracks = {},
            this._target = t,
            this._loop = n || !1,
            this._getter = r || e,
            this._setter = a || i,
            this._clipCount = 0,
            this._delay = 0,
            this._doneList = [],
            this._onframeList = [],
            this._clipList = []
        };
        return y[ii] = {
            when: function(t, e) {
                var i = this._tracks;
                for (var n in e) {
                    if (!i[n]) {
                        i[n] = [];
                        var r = this._getter(this._target, n);
                        if (null == r)
                            continue;
                        0 !== t && i[n].push({
                            time: 0,
                            value: c(r)
                        })
                    }
                    i[n].push({
                        time: t,
                        value: e[n]
                    })
                }
                return this
            },
            during: function(t) {
                return this._onframeList.push(t),
                this
            },
            _doneCallback: function() {
                this._tracks = {},
                this._clipList[Ve] = 0;
                for (var t = this._doneList, e = t[Ve], i = 0; e > i; i++)
                    t[i].call(this)
            },
            start: function(t) {
                var e, i = this, n = 0, r = function() {
                    n--,
                    n || i._doneCallback()
                };
                for (var a in this._tracks) {
                    var o = d(this, t, r, this._tracks[a], a);
                    o && (this._clipList.push(o),
                    n++,
                    this.animation && this.animation.addClip(o),
                    e = o)
                }
                if (e) {
                    var s = e.onframe;
                    e.onframe = function(t, e) {
                        s(t, e);
                        for (var n = 0; n < i._onframeList[Ve]; n++)
                            i._onframeList[n](t, e)
                    }
                }
                return n || this._doneCallback(),
                this
            },
            stop: function(t) {
                for (var e = this._clipList, i = this.animation, n = 0; n < e[Ve]; n++) {
                    var r = e[n];
                    t && r.onframe(this._target, 1),
                    i && i.removeClip(r)
                }
                e[Ve] = 0
            },
            delay: function(t) {
                return this._delay = t,
                this
            },
            done: function(t) {
                return t && this._doneList.push(t),
                this
            },
            getClips: function() {
                return this._clipList
            }
        },
        y
    }),
    e("zrender/core/log", [li, "../config"], function(t) {
        var e = t("../config");
        return function() {
            if (0 !== e.debugMode)
                if (1 == e.debugMode)
                    for (var t in arguments)
                        throw new Error(arguments[t]);
                else if (e.debugMode > 1)
                    for (var t in arguments)
                        console.log(arguments[t])
        }
    }),
    e("echarts/coord/Axis", [li, ee, si], function(t) {
        function e(t, e) {
            var i = t[1] - t[0]
              , n = e
              , r = i / n / 2;
            t[0] += r,
            t[1] -= r
        }
        var i = t(ee)
          , n = i[C]
          , r = t(si)
          , a = function(t, e, i) {
            this.dim = t,
            this.scale = e,
            this._extent = i || [0, 0],
            this[b] = !1,
            this.onBand = !1
        };
        return a[ii] = {
            constructor: a,
            contain: function(t) {
                var e = this._extent
                  , i = Math.min(e[0], e[1])
                  , n = Math.max(e[0], e[1]);
                return t >= i && n >= t
            },
            containData: function(t) {
                return this[te](this[f](t))
            },
            getExtent: function() {
                var t = this._extent.slice();
                return t
            },
            getPixelPrecision: function(t) {
                return i.getPixelPrecision(t || this.scale[$](), this._extent)
            },
            setExtent: function(t, e) {
                var i = this._extent;
                i[0] = t,
                i[1] = e
            },
            dataToCoord: function(t, i) {
                t = this.scale.normalize(t);
                var r = this[$]()
                  , a = this.scale;
                return this.onBand && a.type === y && e(r, a.count()),
                n(t, [0, 1], r, i)
            },
            coordToData: function(t, i) {
                var r = this[$]();
                this.onBand && e(r, this.scale.count());
                var a = n(t, r, [0, 1], i);
                return this.scale.scale(a)
            },
            getTicksCoords: function() {
                if (this.onBand) {
                    for (var t = this.getBands(), e = [], i = 0; i < t[Ve]; i++)
                        e.push(t[i][0]);
                    return t[i - 1] && e.push(t[i - 1][1]),
                    e
                }
                return r.map(this.scale[Q](), this[f], this)
            },
            getLabelsCoords: function() {
                if (this.onBand) {
                    for (var t, e = this.getBands(), i = [], n = 0; n < e[Ve]; n++)
                        t = e[n],
                        i.push((t[0] + t[1]) / 2);
                    return i
                }
                return r.map(this.scale[Q](), this[f], this)
            },
            getBands: function() {
                for (var t = this[$](), e = [], i = this.scale.count(), n = t[0], r = t[1], a = r - n, o = 0; i > o; o++)
                    e.push([a * o / i + n, a * (o + 1) / i + n]);
                return e
            },
            getBandWidth: function() {
                var t = this._extent
                  , e = this.scale[$]()
                  , i = e[1] - e[0] + (this.onBand ? 1 : 0)
                  , n = Math.abs(t[1] - t[0]);
                return Math.abs(n) / i
            }
        },
        a
    }),
    e("echarts/coord/cartesian/axisLabelInterval", [li, si, "../axisHelper"], function(t) {
        var e = t(si)
          , i = t("../axisHelper");
        return function(t) {
            var n = t.model
              , r = n[Qe]("axisLabel")
              , a = r.get(o);
            return t.type !== x || "auto" !== a ? "auto" === a ? 0 : a : i.getAxisLabelInterval(e.map(t.scale[Q](), t[f], t), n.getFormattedLabels(), r[Qe](he)[ue](), t.isHorizontal())
        }
    }),
    e("echarts/chart/heatmap/HeatmapLayer", [li, si], function(t) {
        function e() {
            var t = n.createCanvas();
            this[ti] = t,
            this.blurSize = 30,
            this.pointSize = 20,
            this[ie] = 1,
            this._gradientPixels = {}
        }
        var i = 256
          , n = t(si);
        return e[ii] = {
            update: function(t, e, n, r, a, o) {
                var s = this._getBrush()
                  , l = this._getGradient(t, a, "inRange")
                  , u = this._getGradient(t, a, "outOfRange")
                  , c = this.pointSize + this.blurSize
                  , h = this[ti]
                  , d = h[P]("2d")
                  , f = t[Ve];
                h.width = e,
                h[He] = n;
                for (var p = 0; f > p; ++p) {
                    var m = t[p]
                      , v = m[0]
                      , g = m[1]
                      , y = m[2]
                      , x = r(y);
                    d.globalAlpha = x,
                    d.drawImage(s, v - c, g - c)
                }
                for (var _ = d.getImageData(0, 0, h.width, h[He]), b = _.data, w = 0, M = b[Ve]; M > w; ) {
                    var x = b[w + 3] / 256
                      , S = 4 * Math.floor(x * (i - 1));
                    if (x > 0) {
                        var C = o(x) ? l : u;
                        b[w++] = C[S],
                        b[w++] = C[S + 1],
                        b[w++] = C[S + 2],
                        b[w++] *= this[ie] * C[S + 3]
                    } else
                        w += 4
                }
                return d.putImageData(_, 0, 0),
                h
            },
            _getBrush: function() {
                var t = this._brushCanvas || (this._brushCanvas = n.createCanvas())
                  , e = this.pointSize + this.blurSize
                  , i = 2 * e;
                t.width = i,
                t[He] = i;
                var r = t[P]("2d");
                return r.clearRect(0, 0, i, i),
                r.shadowOffsetX = i,
                r.shadowBlur = this.blurSize,
                r.shadowColor = "#000",
                r.beginPath(),
                r.arc(-e, e, this.pointSize, 0, 2 * Math.PI, !0),
                r.closePath(),
                r.fill(),
                t
            },
            _getGradient: function(t, e, i) {
                for (var n = this._gradientPixels, r = n[i] || (n[i] = new Uint8ClampedArray(1024)), a = [], o = 0, s = 0; 256 > s; s++)
                    e[i](s / 255, !0, a),
                    r[o++] = a[0],
                    r[o++] = a[1],
                    r[o++] = a[2],
                    r[o++] = a[3];
                return r
            }
        },
        e
    }),
    e("zrender/animation/Clip", [li, "./easing"], function(t) {
        function e(t) {
            this._target = t[ze],
            this._life = t.life || 1e3,
            this._delay = t.delay || 0,
            this._initialized = !1,
            this.loop = null == t.loop ? !1 : t.loop,
            this.gap = t.gap || 0,
            this.easing = t.easing || "Linear",
            this.onframe = t.onframe,
            this.ondestroy = t.ondestroy,
            this.onrestart = t.onrestart
        }
        var i = t("./easing");
        return e[ii] = {
            constructor: e,
            step: function(t) {
                this._initialized || (this._startTime = (new Date).getTime() + this._delay,
                this._initialized = !0);
                var e = (t - this._startTime) / this._life;
                if (!(0 > e)) {
                    e = Math.min(e, 1);
                    var n = this.easing
                      , r = typeof n == ei ? i[n] : n
                      , a = typeof r === xe ? r(e) : e;
                    return this.fire("frame", a),
                    1 == e ? this.loop ? (this.restart(),
                    "restart") : (this._needsRemove = !0,
                    "destroy") : null
                }
            },
            restart: function() {
                var t = (new Date).getTime()
                  , e = (t - this._startTime) % this._life;
                this._startTime = (new Date).getTime() - e + this.gap,
                this._needsRemove = !1
            },
            fire: function(t, e) {
                t = "on" + t,
                this[t] && this[t](this._target, e)
            }
        },
        e
    }),
    e("echarts/coord/cartesian/AxisModel", [li, "../../model/Component", si, "../axisModelCreator", "../axisModelCommonMixin"], function(t) {
        function e(t, e) {
            return e.type || (e.data ? x : "value")
        }
        var i = t("../../model/Component")
          , n = t(si)
          , r = t("../axisModelCreator")
          , a = i[Ze]({
            type: "cartesian2dAxis",
            axis: null,
            setNeedsCrossZero: function(t) {
                this[Ke].scale = !t
            },
            setMin: function(t) {
                this[Ke].min = t
            },
            setMax: function(t) {
                this[Ke].max = t
            }
        });
        n.merge(a[ii], t("../axisModelCommonMixin"));
        var o = {
            gridIndex: 0
        };
        return r("x", a, e, o),
        r("y", a, e, o),
        a
    }),
    e("zrender/animation/easing", [], function() {
        var t = {
            linear: function(t) {
                return t
            },
            quadraticIn: function(t) {
                return t * t
            },
            quadraticOut: function(t) {
                return t * (2 - t)
            },
            quadraticInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
            },
            cubicIn: function(t) {
                return t * t * t
            },
            cubicOut: function(t) {
                return --t * t * t + 1
            },
            cubicInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
            },
            quarticIn: function(t) {
                return t * t * t * t
            },
            quarticOut: function(t) {
                return 1 - --t * t * t * t
            },
            quarticInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
            },
            quinticIn: function(t) {
                return t * t * t * t * t
            },
            quinticOut: function(t) {
                return --t * t * t * t * t + 1
            },
            quinticInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
            },
            sinusoidalIn: function(t) {
                return 1 - Math.cos(t * Math.PI / 2)
            },
            sinusoidalOut: function(t) {
                return Math.sin(t * Math.PI / 2)
            },
            sinusoidalInOut: function(t) {
                return .5 * (1 - Math.cos(Math.PI * t))
            },
            exponentialIn: function(t) {
                return 0 === t ? 0 : Math.pow(1024, t - 1)
            },
            exponentialOut: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            exponentialInOut: function(t) {
                return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (-Math.pow(2, -10 * (t - 1)) + 2)
            },
            circularIn: function(t) {
                return 1 - Math.sqrt(1 - t * t)
            },
            circularOut: function(t) {
                return Math.sqrt(1 - --t * t)
            },
            circularInOut: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
            },
            elasticIn: function(t) {
                var e, i = .1, n = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1,
                e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI),
                -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n)))
            },
            elasticOut: function(t) {
                var e, i = .1, n = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1,
                e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI),
                i * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / n) + 1)
            },
            elasticInOut: function(t) {
                var e, i = .1, n = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1,
                e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI),
                (t *= 2) < 1 ? -.5 * i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) * .5 + 1)
            },
            backIn: function(t) {
                var e = 1.70158;
                return t * t * ((e + 1) * t - e)
            },
            backOut: function(t) {
                var e = 1.70158;
                return --t * t * ((e + 1) * t + e) + 1
            },
            backInOut: function(t) {
                var e = 2.5949095;
                return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
            },
            bounceIn: function(e) {
                return 1 - t.bounceOut(1 - e)
            },
            bounceOut: function(t) {
                return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
            },
            bounceInOut: function(e) {
                return .5 > e ? .5 * t.bounceIn(2 * e) : .5 * t.bounceOut(2 * e - 1) + .5
            }
        };
        return t
    }),
    e("echarts/coord/axisModelCreator", [li, "./axisDefault", si, "../model/Component", "../util/layout"], function(t) {
        var e = t("./axisDefault")
          , i = t(si)
          , n = t("../model/Component")
          , r = t("../util/layout")
          , a = ["value", x, "time", "log"];
        return function(t, o, s, l) {
            i.each(a, function(n) {
                o[Ze]({
                    type: t + "Axis." + n,
                    mergeDefaultAndTheme: function(e, a) {
                        var o = this.layoutMode
                          , l = o ? r.getLayoutParams(e) : {}
                          , u = a.getTheme();
                        i.merge(e, u.get(n + "Axis")),
                        i.merge(e, this.getDefaultOption()),
                        e.type = s(t, e),
                        o && r.mergeLayoutParam(e, l, o)
                    },
                    defaultOption: i.mergeAll([{}, e[n + "Axis"], l], !0)
                })
            }),
            n.registerSubTypeDefaulter(t + "Axis", i.curry(s, t))
        }
    }),
    e("echarts/coord/axisModelCommonMixin", [li, si, "./axisHelper"], function(t) {
        function e(t) {
            return r[Ge](t) && null != t.value ? t.value : t
        }
        function i() {
            return this.get("type") === x && r.map(this.get("data"), e)
        }
        function n() {
            return a.getFormattedLabels(this.axis, this.get("axisLabel.formatter"))
        }
        var r = t(si)
          , a = t("./axisHelper");
        return {
            getFormattedLabels: n,
            getCategories: i
        }
    }),
    e("zrender/config", [], function() {
        var t = 1;
        typeof window !== L && (t = Math.max(window.devicePixelRatio || 1, 1));
        var e = {
            debugMode: 0,
            devicePixelRatio: t
        };
        return e
    }),
    e("echarts/coord/axisDefault", [li, si], function(t) {
        var e = t(si)
          , i = {
            show: !0,
            zlevel: 0,
            z: 0,
            inverse: !1,
            name: "",
            nameLocation: "end",
            nameTextStyle: {},
            nameGap: 15,
            axisLine: {
                show: !0,
                onZero: !0,
                lineStyle: {
                    color: "#333",
                    width: 1,
                    type: "solid"
                }
            },
            axisTick: {
                show: !0,
                inside: !1,
                length: 5,
                lineStyle: {
                    color: "#333",
                    width: 1
                }
            },
            axisLabel: {
                show: !0,
                inside: !1,
                rotate: 0,
                margin: 8,
                textStyle: {
                    color: "#333",
                    fontSize: 12
                }
            },
            splitLine: {
                show: !0,
                lineStyle: {
                    color: ["#ccc"],
                    width: 1,
                    type: "solid"
                }
            },
            splitArea: {
                show: !1,
                areaStyle: {
                    color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
                }
            }
        }
          , n = e.merge({
            boundaryGap: !0,
            axisTick: {
                interval: "auto"
            },
            axisLabel: {
                interval: "auto"
            }
        }, i)
          , r = e[Be]({
            boundaryGap: [0, 0],
            splitNumber: 5
        }, i)
          , a = e[Be]({
            scale: !0,
            min: "dataMin",
            max: "dataMax"
        }, r)
          , o = e[Be]({}, r);
        return o.scale = !0,
        {
            categoryAxis: n,
            valueAxis: r,
            timeAxis: a,
            logAxis: o
        }
    }),
    e("zrender/contain/line", [], function() {
        return {
            containStroke: function(t, e, i, n, r, a, o) {
                if (0 === r)
                    return !1;
                var s = r
                  , l = 0
                  , u = t;
                if (o > e + s && o > n + s || e - s > o && n - s > o || a > t + s && a > i + s || t - s > a && i - s > a)
                    return !1;
                if (t === i)
                    return Math.abs(a - t) <= s / 2;
                l = (e - n) / (t - i),
                u = (t * n - i * e) / (t - i);
                var c = l * a - o + u
                  , h = c * c / (l * l + 1);
                return s / 2 * s / 2 >= h
            }
        }
    }),
    e("zrender/contain/quadratic", [li, "../core/curve"], function(t) {
        var e = t("../core/curve");
        return {
            containStroke: function(t, i, n, r, a, o, s, l, u) {
                if (0 === s)
                    return !1;
                var c = s;
                if (u > i + c && u > r + c && u > o + c || i - c > u && r - c > u && o - c > u || l > t + c && l > n + c && l > a + c || t - c > l && n - c > l && a - c > l)
                    return !1;
                var h = e.quadraticProjectPoint(t, i, n, r, a, o, l, u, null);
                return c / 2 >= h
            }
        }
    }),
    e("zrender/contain/cubic", [li, "../core/curve"], function(t) {
        var e = t("../core/curve");
        return {
            containStroke: function(t, i, n, r, a, o, s, l, u, c, h) {
                if (0 === u)
                    return !1;
                var d = u;
                if (h > i + d && h > r + d && h > o + d && h > l + d || i - d > h && r - d > h && o - d > h && l - d > h || c > t + d && c > n + d && c > a + d && c > s + d || t - d > c && n - d > c && a - d > c && s - d > c)
                    return !1;
                var f = e.cubicProjectPoint(t, i, n, r, a, o, s, l, c, h, null);
                return d / 2 >= f
            }
        }
    }),
    e("zrender/contain/arc", [li, "./util"], function(t) {
        var e = t("./util").normalizeRadian
          , i = 2 * Math.PI;
        return {
            containStroke: function(t, n, r, a, o, s, l, u, c) {
                if (0 === l)
                    return !1;
                var h = l;
                u -= t,
                c -= n;
                var d = Math.sqrt(u * u + c * c);
                if (d - h > r || r > d + h)
                    return !1;
                if (Math.abs(a - o) % i < 1e-4)
                    return !0;
                if (s) {
                    var f = a;
                    a = e(o),
                    o = e(f)
                } else
                    a = e(a),
                    o = e(o);
                a > o && (o += i);
                var p = Math.atan2(c, u);
                return 0 > p && (p += i),
                p >= a && o >= p || p + i >= a && o >= p + i
            }
        }
    }),
    e("zrender/contain/windingLine", [], function() {
        return function(t, e, i, n, r, a) {
            if (a > e && a > n || e > a && n > a)
                return 0;
            if (n === e)
                return 0;
            var o = e > n ? 1 : -1
              , s = (a - e) / (n - e)
              , l = s * (i - t) + t;
            return l > r ? o : 0
        }
    }),
    e("zrender/contain/util", [li], function() {
        var t = 2 * Math.PI;
        return {
            normalizeRadian: function(e) {
                return e %= t,
                0 > e && (e += t),
                e
            }
        }
    }),
    e("zrender/core/LRU", [li], function() {
        var t = function() {
            this.head = null,
            this.tail = null,
            this._len = 0
        }
          , e = t[ii];
        e.insert = function(t) {
            var e = new i(t);
            return this.insertEntry(e),
            e
        }
        ,
        e.insertEntry = function(t) {
            this.head ? (this.tail.next = t,
            t.prev = this.tail,
            this.tail = t) : this.head = this.tail = t,
            this._len++
        }
        ,
        e[Ne] = function(t) {
            var e = t.prev
              , i = t.next;
            e ? e.next = i : this.head = i,
            i ? i.prev = e : this.tail = e,
            t.next = t.prev = null,
            this._len--
        }
        ,
        e.len = function() {
            return this._len
        }
        ;
        var i = function(t) {
            this.value = t,
            this.next,
            this.prev
        }
          , n = function(e) {
            this._list = new t,
            this._map = {},
            this._maxSize = e || 10
        }
          , r = n[ii];
        return r.put = function(t, e) {
            var i = this._list
              , n = this._map;
            if (null == n[t]) {
                var r = i.len();
                if (r >= this._maxSize && r > 0) {
                    var a = i.head;
                    i[Ne](a),
                    delete n[a.key]
                }
                var o = i.insert(e);
                o.key = t,
                n[t] = o
            }
        }
        ,
        r.get = function(t) {
            var e = this._map[t]
              , i = this._list;
            return null != e ? (e !== i.tail && (i[Ne](e),
            i.insertEntry(e)),
            e.value) : void 0
        }
        ,
        r.clear = function() {
            this._list.clear(),
            this._map = {}
        }
        ,
        n
    }),
    e("zrender/graphic/helper/roundRect", [li], function() {
        return {
            buildPath: function(t, e) {
                var i, n, r, a, o = e.x, s = e.y, l = e.width, u = e[He], c = e.r;
                0 > l && (o += l,
                l = -l),
                0 > u && (s += u,
                u = -u),
                typeof c === ge ? i = n = r = a = c : c instanceof Array ? 1 === c[Ve] ? i = n = r = a = c[0] : 2 === c[Ve] ? (i = r = c[0],
                n = a = c[1]) : 3 === c[Ve] ? (i = c[0],
                n = a = c[1],
                r = c[2]) : (i = c[0],
                n = c[1],
                r = c[2],
                a = c[3]) : i = n = r = a = 0;
                var h;
                i + n > l && (h = i + n,
                i *= l / h,
                n *= l / h),
                r + a > l && (h = r + a,
                r *= l / h,
                a *= l / h),
                n + r > u && (h = n + r,
                n *= u / h,
                r *= u / h),
                i + a > u && (h = i + a,
                i *= u / h,
                a *= u / h),
                t.moveTo(o + i, s),
                t.lineTo(o + l - n, s),
                0 !== n && t.quadraticCurveTo(o + l, s, o + l, s + n),
                t.lineTo(o + l, s + u - r),
                0 !== r && t.quadraticCurveTo(o + l, s + u, o + l - r, s + u),
                t.lineTo(o + a, s + u),
                0 !== a && t.quadraticCurveTo(o, s + u, o, s + u - a),
                t.lineTo(o, s + i),
                0 !== i && t.quadraticCurveTo(o, s, o + i, s)
            }
        }
    }),
    e("echarts/chart/bar/barItemStyle", [li, "../../model/mixin/makeStyleMapper"], function(t) {
        return {
            getBarItemStyle: t("../../model/mixin/makeStyleMapper")([["fill", "color"], [N, "barBorderColor"], [G, "barBorderWidth"], [ie], ["shadowBlur"], ["shadowOffsetX"], ["shadowOffsetY"], ["shadowColor"]])
        }
    }),
    e("zrender/graphic/helper/poly", [li, "./smoothSpline", "./smoothBezier"], function(t) {
        var e = t("./smoothSpline")
          , i = t("./smoothBezier");
        return {
            buildPath: function(t, n, r) {
                var a = n.points
                  , o = n.smooth;
                if (a && a[Ve] >= 2) {
                    if (o && "spline" !== o) {
                        var s = i(a, o, r, n.smoothConstraint);
                        t.moveTo(a[0][0], a[0][1]);
                        for (var l = a[Ve], u = 0; (r ? l : l - 1) > u; u++) {
                            var c = s[2 * u]
                              , h = s[2 * u + 1]
                              , d = a[(u + 1) % l];
                            t.bezierCurveTo(c[0], c[1], h[0], h[1], d[0], d[1])
                        }
                    } else {
                        "spline" === o && (a = e(a, r)),
                        t.moveTo(a[0][0], a[0][1]);
                        for (var u = 1, f = a[Ve]; f > u; u++)
                            t.lineTo(a[u][0], a[u][1])
                    }
                    r && t.closePath()
                }
            }
        }
    }),
    e("zrender/Handler", [li, "./core/env", "./core/event", "./core/util", "./mixin/Draggable", "./core/GestureMgr", "./mixin/Eventful"], function(t) {
        function e(t, e, i) {
            return {
                type: t,
                event: i,
                target: e,
                cancelBubble: !1,
                offsetX: i.zrX,
                offsetY: i.zrY,
                gestureEvent: i.gestureEvent,
                pinchX: i.pinchX,
                pinchY: i.pinchY,
                pinchScale: i.pinchScale,
                wheelDelta: i.zrDelta
            }
        }
        function i(t, e, i) {
            var n = t._gestureMgr;
            "start" === i && n.clear();
            var r = n.recognize(e, t._findHover(e.zrX, e.zrY, null));
            if ("end" === i && n.clear(),
            r) {
                var a = r.type;
                e.gestureEvent = a,
                t._dispatchProxy(r[ze], a, r.event)
            }
        }
        function r(t) {
            function e(t, e) {
                return function() {
                    return e._touching ? void 0 : t.apply(e, arguments)
                }
            }
            for (var i = g[H](y), n = 0; n < i[Ve]; n++) {
                var r = i[n];
                t._handlers[r] = d.bind(M[r], t)
            }
            for (var n = 0; n < v[Ve]; n++) {
                var r = v[n];
                t._handlers[r] = e(M[r], t)
            }
        }
        function a(t, e, i) {
            if (t[t.rectHover ? "rectContain" : te](e, i)) {
                for (var n = t[R]; n; ) {
                    if (n.clipPath && !n.clipPath[te](e, i))
                        return !1;
                    n = n[R]
                }
                return !0
            }
            return !1
        }
        function o(t) {
            t._touching = !0,
            clearTimeout(t._touchTimer),
            t._touchTimer = setTimeout(function() {
                t._touching = !1
            }, 700)
        }
        function s() {
            return !1
        }
        function l() {
            return c.touchEventsSupported
        }
        function u(t) {
            return "mousewheel" === t && c.firefox ? "DOMMouseScroll" : t
        }
        var c = t("./core/env")
          , h = t("./core/event")
          , d = t("./core/util")
          , f = t("./mixin/Draggable")
          , p = t("./core/GestureMgr")
          , m = t("./mixin/Eventful")
          , v = ["click", "dblclick", "mousewheel", Le];
        !s() && v.push("mouseup", "mousedown", n);
        var g = ["touchstart", "touchend", "touchmove"]
          , y = ["pointerdown", "pointerup", "pointermove"]
          , x = 300
          , _ = h.addEventListener
          , b = h.removeEventListener
          , w = h.normalizeEvent
          , M = {
            mousemove: function(t) {
                t = w(this.root, t);
                var e = t.zrX
                  , i = t.zrY
                  , r = this._findHover(e, i, null)
                  , a = this._hovered;
                this._hovered = r,
                this.root.style.cursor = r ? r.cursor : this._defaultCursorStyle,
                a && r !== a && a.__zr && this._dispatchProxy(a, Le, t),
                this._dispatchProxy(r, n, t),
                r && r !== a && this._dispatchProxy(r, ke, t)
            },
            mouseout: function(t) {
                t = w(this.root, t);
                var e = t.toElement || t.relatedTarget;
                if (e != this.root)
                    for (; e && 9 != e.nodeType; ) {
                        if (e === this.root)
                            return;
                        e = e.parentNode
                    }
                this._dispatchProxy(this._hovered, Le, t),
                this[Re]("globalout", {
                    event: t
                })
            },
            touchstart: function(t) {
                t = w(this.root, t),
                this._lastTouchMoment = new Date,
                i(this, t, "start"),
                M[n].call(this, t),
                M.mousedown.call(this, t),
                o(this)
            },
            touchmove: function(t) {
                t = w(this.root, t),
                i(this, t, "change"),
                M[n].call(this, t),
                o(this)
            },
            touchend: function(t) {
                t = w(this.root, t),
                i(this, t, "end"),
                M.mouseup.call(this, t),
                +new Date - this._lastTouchMoment < x && M.click.call(this, t),
                o(this)
            }
        };
        d.each(["click", "mousedown", "mouseup", "mousewheel", "dblclick"], function(t) {
            M[t] = function(e) {
                e = w(this.root, e);
                var i = this._findHover(e.zrX, e.zrY, null);
                this._dispatchProxy(i, t, e)
            }
        });
        var S = function(t, e, i) {
            function n(e, i) {
                d.each(e, function(e) {
                    _(t, u(e), i._handlers[e])
                }, i)
            }
            m.call(this),
            this.root = t,
            this.storage = e,
            this.painter = i,
            this._hovered,
            this._lastTouchMoment,
            this._lastX,
            this._lastY,
            this._defaultCursorStyle = "default",
            this._gestureMgr = new p,
            this._handlers = [],
            this._touching = !1,
            this._touchTimer,
            r(this),
            s() ? n(y, this) : l() && n(g, this),
            n(v, this),
            f.call(this)
        };
        return S[ii] = {
            constructor: S,
            resize: function() {
                this._hovered = null
            },
            dispatch: function(t, e) {
                var i = this._handlers[t];
                i && i.call(this, e)
            },
            dispose: function() {
                for (var t = this.root, e = v[H](g), i = 0; i < e[Ve]; i++) {
                    var n = e[i];
                    b(t, u(n), this._handlers[n])
                }
                this.root = this.storage = this.painter = null
            },
            setDefaultCursorStyle: function(t) {
                this._defaultCursorStyle = t
            },
            _dispatchProxy: function(t, i, n) {
                for (var r = "on" + i, a = e(i, t, n), o = t; o && (o[r] && (a.cancelBubble = o[r].call(o, a)),
                o[Re](i, a),
                o = o[R],
                !a.cancelBubble); )
                    ;
                a.cancelBubble || (this[Re](i, a),
                this.painter && this.painter.eachOtherLayer(function(t) {
                    typeof t[r] == xe && t[r].call(t, a),
                    t[Re] && t[Re](i, a)
                }))
            },
            _findHover: function(t, e, i) {
                for (var n = this.storage.getDisplayList(), r = n[Ve] - 1; r >= 0; r--)
                    if (!n[r].silent && n[r] !== i && a(n[r], t, e))
                        return n[r]
            }
        },
        d.mixin(S, m),
        d.mixin(S, f),
        S
    }),
    e("zrender/Storage", [li, "./core/util", "./container/Group"], function(t) {
        function e(t, e) {
            return t[Se] === e[Se] ? t.z === e.z ? t.z2 === e.z2 ? t.__renderidx - e.__renderidx : t.z2 - e.z2 : t.z - e.z : t[Se] - e[Se]
        }
        var i = t("./core/util")
          , n = t("./container/Group")
          , r = function() {
            this._elements = {},
            this._roots = [],
            this._displayList = [],
            this._displayListLen = 0
        };
        return r[ii] = {
            constructor: r,
            getDisplayList: function(t) {
                return t && this.updateDisplayList(),
                this._displayList
            },
            updateDisplayList: function() {
                this._displayListLen = 0;
                for (var t = this._roots, i = this._displayList, n = 0, r = t[Ve]; r > n; n++) {
                    var a = t[n];
                    this._updateAndAddDisplayable(a)
                }
                i[Ve] = this._displayListLen;
                for (var n = 0, r = i[Ve]; r > n; n++)
                    i[n].__renderidx = n;
                i.sort(e)
            },
            _updateAndAddDisplayable: function(t, e) {
                if (!t[qe]) {
                    t.beforeUpdate(),
                    t[Fe](),
                    t.afterUpdate();
                    var i = t.clipPath;
                    if (i && (i[R] = t,
                    i.updateTransform(),
                    e ? (e = e.slice(),
                    e.push(i)) : e = [i]),
                    "group" == t.type) {
                        for (var n = t._children, r = 0; r < n[Ve]; r++) {
                            var a = n[r];
                            a.__dirty = t.__dirty || a.__dirty,
                            this._updateAndAddDisplayable(a, e)
                        }
                        t.__dirty = !1
                    } else
                        t.__clipPaths = e,
                        this._displayList[this._displayListLen++] = t
                }
            },
            addRoot: function(t) {
                this._elements[t.id] || (t instanceof n && t.addChildrenToStorage(this),
                this.addToMap(t),
                this._roots.push(t))
            },
            delRoot: function(t) {
                if (null == t) {
                    for (var e = 0; e < this._roots[Ve]; e++) {
                        var r = this._roots[e];
                        r instanceof n && r.delChildrenFromStorage(this)
                    }
                    return this._elements = {},
                    this._roots = [],
                    this._displayList = [],
                    void (this._displayListLen = 0)
                }
                if (t instanceof Array)
                    for (var e = 0, a = t[Ve]; a > e; e++)
                        this.delRoot(t[e]);
                else {
                    var o;
                    o = typeof t == ei ? this._elements[t] : t;
                    var s = i[_e](this._roots, o);
                    s >= 0 && (this.delFromMap(o.id),
                    this._roots.splice(s, 1),
                    o instanceof n && o.delChildrenFromStorage(this))
                }
            },
            addToMap: function(t) {
                return t instanceof n && (t.__storage = this),
                t.dirty(),
                this._elements[t.id] = t,
                this
            },
            get: function(t) {
                return this._elements[t]
            },
            delFromMap: function(t) {
                var e = this._elements
                  , i = e[t];
                return i && (delete e[t],
                i instanceof n && (i.__storage = null)),
                this
            },
            dispose: function() {
                this._elements = this._renderList = this._roots = null
            }
        },
        r
    }),
    e("zrender/animation/Animation", [li, k, "../core/event", "./Animator"], function(t) {
        var e = t(k)
          , i = t("../core/event").Dispatcher
          , n = typeof window !== L && (window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function(t) {
            setTimeout(t, 16)
        }
          , r = t("./Animator")
          , a = function(t) {
            t = t || {},
            this.stage = t.stage || {},
            this.onframe = t.onframe || function() {}
            ,
            this._clips = [],
            this._running = !1,
            this._time = 0,
            i.call(this)
        };
        return a[ii] = {
            constructor: a,
            addClip: function(t) {
                this._clips.push(t)
            },
            addAnimator: function(t) {
                t.animation = this;
                for (var e = t.getClips(), i = 0; i < e[Ve]; i++)
                    this.addClip(e[i])
            },
            removeClip: function(t) {
                var i = e[_e](this._clips, t);
                i >= 0 && this._clips.splice(i, 1)
            },
            removeAnimator: function(t) {
                for (var e = t.getClips(), i = 0; i < e[Ve]; i++)
                    this.removeClip(e[i]);
                t.animation = null
            },
            _update: function() {
                for (var t = (new Date).getTime(), e = t - this._time, i = this._clips, n = i[Ve], r = [], a = [], o = 0; n > o; o++) {
                    var s = i[o]
                      , l = s.step(t);
                    l && (r.push(l),
                    a.push(s))
                }
                for (var o = 0; n > o; )
                    i[o]._needsRemove ? (i[o] = i[n - 1],
                    i.pop(),
                    n--) : o++;
                n = r[Ve];
                for (var o = 0; n > o; o++)
                    a[o].fire(r[o]);
                this._time = t,
                this.onframe(e),
                this[Re]("frame", e),
                this.stage[Fe] && this.stage[Fe]()
            },
            start: function() {
                function t() {
                    e._running && (n(t),
                    e._update())
                }
                var e = this;
                this._running = !0,
                this._time = (new Date).getTime(),
                n(t)
            },
            stop: function() {
                this._running = !1
            },
            clear: function() {
                this._clips = []
            },
            animate: function(t, e) {
                e = e || {};
                var i = new r(t,e.loop,e.getter,e.setter);
                return i
            }
        },
        e.mixin(a, i),
        a
    }),
    e("zrender/Painter", [li, "./config", "./core/util", "./core/log", "./core/BoundingRect", "./Layer", "./graphic/Image"], function(t) {
        function e(t) {
            return parseInt(t, 10)
        }
        function n(t) {
            return t ? t.isBuildin ? !0 : typeof t[Je] !== xe || typeof t.refresh !== xe ? !1 : !0 : !1
        }
        function r(t) {
            t.__unusedCount++
        }
        function a(t) {
            t.__dirty = !1,
            1 == t.__unusedCount && t.clear()
        }
        function o(t, e, i) {
            return p.copy(t[se]()),
            t[ai] && p[F](t[ai]),
            m.width = e,
            m[He] = i,
            !p.intersect(m)
        }
        function s(t, e) {
            if (!t || !e || t[Ve] !== e[Ve])
                return !0;
            for (var i = 0; i < t[Ve]; i++)
                if (t[i] !== e[i])
                    return !0
        }
        function l(t, e) {
            for (var n = 0; n < t[Ve]; n++) {
                var r, a = t[n];
                a[ai] && (r = a[ai],
                e[ai](r[0], r[1], r[2], r[3], r[4], r[5]));
                var o = a.path;
                o.beginPath(e),
                a[i](o, a.shape),
                e.clip(),
                a[ai] && (r = a.invTransform,
                e[ai](r[0], r[1], r[2], r[3], r[4], r[5]))
            }
        }
        var u = t("./config")
          , c = t("./core/util")
          , h = t("./core/log")
          , d = t("./core/BoundingRect")
          , f = t("./Layer")
          , p = new d(0,0,0,0)
          , m = new d(0,0,0,0)
          , v = function(t, e, i) {
            var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
            i = i || {},
            this.dpr = i.devicePixelRatio || u.devicePixelRatio,
            this._singleCanvas = n,
            this.root = t;
            var r = t.style;
            if (r && (r["-webkit-tap-highlight-color"] = "transparent",
            r["-webkit-user-select"] = "none",
            r["user-select"] = "none",
            r["-webkit-touch-callout"] = "none",
            t.innerHTML = ""),
            this.storage = e,
            n) {
                var a = t.width
                  , o = t[He];
                this._width = a,
                this._height = o;
                var s = new f(t,this,1);
                s.initContext(),
                this._layers = {
                    0: s
                },
                this._zlevelList = [0]
            } else {
                var a = this._getWidth()
                  , o = this._getHeight();
                this._width = a,
                this._height = o;
                var l = document[D]("div");
                this._domRoot = l;
                var c = l.style;
                c[re] = "relative",
                c.overflow = "hidden",
                c.width = this._width + "px",
                c[He] = this._height + "px",
                t.appendChild(l),
                this._layers = {},
                this._zlevelList = []
            }
            this._layerConfig = {},
            this.pathToImage = this._createPathToImage()
        };
        return v[ii] = {
            constructor: v,
            isSingleCanvas: function() {
                return this._singleCanvas
            },
            getViewportRoot: function() {
                return this._singleCanvas ? this._layers[0].dom : this._domRoot
            },
            refresh: function(t) {
                var e = this.storage.getDisplayList(!0)
                  , i = this._zlevelList;
                this._paintList(e, t);
                for (var n = 0; n < i[Ve]; n++) {
                    var r = i[n]
                      , a = this._layers[r];
                    !a.isBuildin && a.refresh && a.refresh()
                }
                return this
            },
            _paintList: function(t, e) {
                null == e && (e = !1),
                this._updateLayerStatus(t);
                var i, n, u, c = this._width, d = this._height;
                this.eachBuildinLayer(r);
                for (var f = null, p = 0, m = t[Ve]; m > p; p++) {
                    var v = t[p]
                      , g = this._singleCanvas ? 0 : v[Se];
                    if (n !== g && (n = g,
                    i = this.getLayer(n),
                    i.isBuildin || h("ZLevel " + n + " has been used by unkown layer " + i.id),
                    u = i.ctx,
                    i.__unusedCount = 0,
                    (i.__dirty || e) && i.clear()),
                    (i.__dirty || e) && !v.invisible && 0 !== v.style[ie] && v.scale[0] && v.scale[1] && (!v.culling || !o(v, c, d))) {
                        var y = v.__clipPaths;
                        s(y, f) && (f && u.restore(),
                        y && (u.save(),
                        l(y, u)),
                        f = y),
                        v.beforeBrush && v.beforeBrush(u),
                        v.brush(u, !1),
                        v.afterBrush && v.afterBrush(u)
                    }
                    v.__dirty = !1
                }
                f && u.restore(),
                this.eachBuildinLayer(a)
            },
            getLayer: function(t) {
                if (this._singleCanvas)
                    return this._layers[0];
                var e = this._layers[t];
                return e || (e = new f("zr_" + t,this,this.dpr),
                e.isBuildin = !0,
                this._layerConfig[t] && c.merge(e, this._layerConfig[t], !0),
                this.insertLayer(t, e),
                e.initContext()),
                e
            },
            insertLayer: function(t, e) {
                var i = this._layers
                  , r = this._zlevelList
                  , a = r[Ve]
                  , o = null
                  , s = -1
                  , l = this._domRoot;
                if (i[t])
                    return void h("ZLevel " + t + " has been used already");
                if (!n(e))
                    return void h("Layer of zlevel " + t + " is not valid");
                if (a > 0 && t > r[0]) {
                    for (s = 0; a - 1 > s && !(r[s] < t && r[s + 1] > t); s++)
                        ;
                    o = i[r[s]]
                }
                if (r.splice(s + 1, 0, t),
                o) {
                    var u = o.dom;
                    u.nextSibling ? l.insertBefore(e.dom, u.nextSibling) : l.appendChild(e.dom)
                } else
                    l.firstChild ? l.insertBefore(e.dom, l.firstChild) : l.appendChild(e.dom);
                i[t] = e
            },
            eachLayer: function(t, e) {
                var i, n, r = this._zlevelList;
                for (n = 0; n < r[Ve]; n++)
                    i = r[n],
                    t.call(e, this._layers[i], i)
            },
            eachBuildinLayer: function(t, e) {
                var i, n, r, a = this._zlevelList;
                for (r = 0; r < a[Ve]; r++)
                    n = a[r],
                    i = this._layers[n],
                    i.isBuildin && t.call(e, i, n)
            },
            eachOtherLayer: function(t, e) {
                var i, n, r, a = this._zlevelList;
                for (r = 0; r < a[Ve]; r++)
                    n = a[r],
                    i = this._layers[n],
                    i.isBuildin || t.call(e, i, n)
            },
            getLayers: function() {
                return this._layers
            },
            _updateLayerStatus: function(t) {
                var e = this._layers
                  , i = {};
                this.eachBuildinLayer(function(t, e) {
                    i[e] = t.elCount,
                    t.elCount = 0
                });
                for (var n = 0, r = t[Ve]; r > n; n++) {
                    var a = t[n]
                      , o = this._singleCanvas ? 0 : a[Se]
                      , s = e[o];
                    if (s) {
                        if (s.elCount++,
                        s.__dirty)
                            continue;
                        s.__dirty = a.__dirty
                    }
                }
                this.eachBuildinLayer(function(t, e) {
                    i[e] !== t.elCount && (t.__dirty = !0)
                })
            },
            clear: function() {
                return this.eachBuildinLayer(this._clearLayer),
                this
            },
            _clearLayer: function(t) {
                t.clear()
            },
            configLayer: function(t, e) {
                if (e) {
                    var i = this._layerConfig;
                    i[t] ? c.merge(i[t], e, !0) : i[t] = e;
                    var n = this._layers[t];
                    n && c.merge(n, i[t], !0)
                }
            },
            delLayer: function(t) {
                var e = this._layers
                  , i = this._zlevelList
                  , n = e[t];
                n && (n.dom.parentNode.removeChild(n.dom),
                delete e[t],
                i.splice(c[_e](i, t), 1))
            },
            resize: function(t, e) {
                var i = this._domRoot;
                if (i.style.display = "none",
                t = t || this._getWidth(),
                e = e || this._getHeight(),
                i.style.display = "",
                this._width != t || e != this._height) {
                    i.style.width = t + "px",
                    i.style[He] = e + "px";
                    for (var n in this._layers)
                        this._layers[n][Je](t, e);
                    this.refresh(!0)
                }
                return this._width = t,
                this._height = e,
                this
            },
            clearLayer: function(t) {
                var e = this._layers[t];
                e && e.clear()
            },
            dispose: function() {
                this.root.innerHTML = "",
                this.root = this.storage = this._domRoot = this._layers = null
            },
            getRenderedCanvas: function(t) {
                if (t = t || {},
                this._singleCanvas)
                    return this._layers[0].dom;
                var e = new f("image",this,t.pixelRatio || this.dpr);
                e.initContext();
                var i = e.ctx;
                e.clearColor = t[Xe],
                e.clear();
                for (var n = this.storage.getDisplayList(!0), r = 0; r < n[Ve]; r++) {
                    var a = n[r];
                    a.invisible || (a.beforeBrush && a.beforeBrush(i),
                    a.brush(i, !1),
                    a.afterBrush && a.afterBrush(i))
                }
                return e.dom
            },
            getWidth: function() {
                return this._width
            },
            getHeight: function() {
                return this._height
            },
            _getWidth: function() {
                var t = this.root
                  , i = document.defaultView.getComputedStyle(t);
                return (t.clientWidth || e(i.width) || e(t.style.width)) - (e(i.paddingLeft) || 0) - (e(i.paddingRight) || 0) | 0
            },
            _getHeight: function() {
                var t = this.root
                  , i = document.defaultView.getComputedStyle(t);
                return (t.clientHeight || e(i[He]) || e(t.style[He])) - (e(i.paddingTop) || 0) - (e(i.paddingBottom) || 0) | 0
            },
            _pathToImage: function(e, i, n, r, a) {
                var o = document[D](ti)
                  , s = o[P]("2d");
                o.width = n * a,
                o[He] = r * a,
                s.clearRect(0, 0, n * a, r * a);
                var l = {
                    position: i[re],
                    rotation: i.rotation,
                    scale: i.scale
                };
                i[re] = [0, 0, 0],
                i.rotation = 0,
                i.scale = [1, 1],
                i && i.brush(s);
                var u = t("./graphic/Image")
                  , c = new u({
                    id: e,
                    style: {
                        x: 0,
                        y: 0,
                        image: o
                    }
                });
                return null != l[re] && (c[re] = i[re] = l[re]),
                null != l.rotation && (c.rotation = i.rotation = l.rotation),
                null != l.scale && (c.scale = i.scale = l.scale),
                c
            },
            _createPathToImage: function() {
                var t = this;
                return function(e, i, n, r) {
                    return t._pathToImage(e, i, n, r, t.dpr)
                }
            }
        },
        v
    }),
    e("zrender/graphic/helper/smoothSpline", [li, "../../core/vector"], function(t) {
        function e(t, e, i, n, r, a, o) {
            var s = .5 * (i - t)
              , l = .5 * (n - e);
            return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e
        }
        var i = t("../../core/vector");
        return function(t, n) {
            for (var r = t[Ve], a = [], o = 0, s = 1; r > s; s++)
                o += i[Y](t[s - 1], t[s]);
            var l = o / 2;
            l = r > l ? r : l;
            for (var s = 0; l > s; s++) {
                var u, c, h, d = s / (l - 1) * (n ? r : r - 1), f = Math.floor(d), p = d - f, m = t[f % r];
                n ? (u = t[(f - 1 + r) % r],
                c = t[(f + 1) % r],
                h = t[(f + 2) % r]) : (u = t[0 === f ? f : f - 1],
                c = t[f > r - 2 ? r - 1 : f + 1],
                h = t[f > r - 3 ? r - 1 : f + 2]);
                var v = p * p
                  , g = p * v;
                a.push([e(u[0], m[0], c[0], h[0], p, v, g), e(u[1], m[1], c[1], h[1], p, v, g)])
            }
            return a
        }
    }),
    e("zrender/graphic/helper/smoothBezier", [li, "../../core/vector"], function(t) {
        var e = t("../../core/vector")
          , i = e.min
          , n = e.max
          , r = e.scale
          , a = e[Y]
          , o = e.add;
        return function(t, s, l, u) {
            var c, h, d, f, p = [], m = [], v = [], g = [];
            if (u) {
                d = [1 / 0, 1 / 0],
                f = [-1 / 0, -1 / 0];
                for (var y = 0, x = t[Ve]; x > y; y++)
                    i(d, d, t[y]),
                    n(f, f, t[y]);
                i(d, d, u[0]),
                n(f, f, u[1])
            }
            for (var y = 0, x = t[Ve]; x > y; y++) {
                var _ = t[y];
                if (l)
                    c = t[y ? y - 1 : x - 1],
                    h = t[(y + 1) % x];
                else {
                    if (0 === y || y === x - 1) {
                        p.push(e.clone(t[y]));
                        continue
                    }
                    c = t[y - 1],
                    h = t[y + 1]
                }
                e.sub(m, h, c),
                r(m, m, s);
                var b = a(_, c)
                  , w = a(_, h)
                  , M = b + w;
                0 !== M && (b /= M,
                w /= M),
                r(v, m, -b),
                r(g, m, w);
                var S = o([], _, v)
                  , C = o([], _, g);
                u && (n(S, S, d),
                i(S, S, f),
                n(C, C, d),
                i(C, C, f)),
                p.push(S),
                p.push(C)
            }
            return l && p.push(p.shift()),
            p
        }
    }),
    e("zrender/core/event", [li, "../mixin/Eventful"], function(t) {
        function e(t) {
            return t.getBoundingClientRect ? t.getBoundingClientRect() : {
                left: 0,
                top: 0
            }
        }
        function i(t, i) {
            if (i = i || window.event,
            null != i.zrX)
                return i;
            var n = i.type
              , r = n && n[_e]("touch") >= 0;
            if (r) {
                var a = "touchend" != n ? i.targetTouches[0] : i.changedTouches[0];
                if (a) {
                    var o = e(t);
                    i.zrX = a.clientX - o.left,
                    i.zrY = a.clientY - o.top
                }
            } else {
                var s = 0
                  , l = 0;
                i.pageX || i.pageY ? (s = i.pageX,
                l = i.pageY) : (s = i.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
                l = i.clientY + document.body.scrollTop + document.documentElement.scrollTop);
                var u = e(t)
                  , c = u.top + (window.pageYOffset || t.scrollTop) - (t.clientTop || 0)
                  , h = u.left + (window.pageXOffset || t.scrollLeft) - (t.clientLeft || 0);
                i.zrX = s - h,
                i.zrY = l - c,
                i.zrDelta = i.wheelDelta ? i.wheelDelta / 120 : -(i.detail || 0) / 3
            }
            return i
        }
        function n(t, e, i) {
            o ? t.addEventListener(e, i) : t.attachEvent("on" + e, i)
        }
        function r(t, e, i) {
            o ? t.removeEventListener(e, i) : t.detachEvent("on" + e, i)
        }
        var a = t("../mixin/Eventful")
          , o = typeof window !== L && !!window.addEventListener
          , s = o ? function(t) {
            t.preventDefault(),
            t.stopPropagation(),
            t.cancelBubble = !0
        }
        : function(t) {
            t.returnValue = !1,
            t.cancelBubble = !0
        }
        ;
        return {
            normalizeEvent: i,
            addEventListener: n,
            removeEventListener: r,
            stop: s,
            Dispatcher: a
        }
    }),
    e("zrender/mixin/Draggable", [li], function() {
        function t() {
            this.on("mousedown", this._dragStart, this),
            this.on(n, this._drag, this),
            this.on("mouseup", this._dragEnd, this),
            this.on("globalout", this._dragEnd, this)
        }
        return t[ii] = {
            constructor: t,
            _dragStart: function(t) {
                var e = t[ze];
                e && e.draggable && (this._draggingTarget = e,
                e.dragging = !0,
                this._x = t.offsetX,
                this._y = t.offsetY,
                this._dispatchProxy(e, "dragstart", t.event))
            },
            _drag: function(t) {
                var e = this._draggingTarget;
                if (e) {
                    var i = t.offsetX
                      , n = t.offsetY
                      , r = i - this._x
                      , a = n - this._y;
                    this._x = i,
                    this._y = n,
                    e.drift(r, a, t),
                    this._dispatchProxy(e, "drag", t.event);
                    var o = this._findHover(i, n, e)
                      , s = this._dropTarget;
                    this._dropTarget = o,
                    e !== o && (s && o !== s && this._dispatchProxy(s, "dragleave", t.event),
                    o && o !== s && this._dispatchProxy(o, "dragenter", t.event))
                }
            },
            _dragEnd: function(t) {
                var e = this._draggingTarget;
                e && (e.dragging = !1),
                this._dispatchProxy(e, "dragend", t.event),
                this._dropTarget && this._dispatchProxy(this._dropTarget, "drop", t.event),
                this._draggingTarget = null,
                this._dropTarget = null
            }
        },
        t
    }),
    e("zrender/core/GestureMgr", [li], function() {
        function t(t) {
            var e = t[1][0] - t[0][0]
              , i = t[1][1] - t[0][1];
            return Math.sqrt(e * e + i * i)
        }
        function e(t) {
            return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
        }
        var i = function() {
            this._track = []
        };
        i[ii] = {
            constructor: i,
            recognize: function(t, e) {
                return this._doTrack(t, e),
                this._recognize(t)
            },
            clear: function() {
                return this._track[Ve] = 0,
                this
            },
            _doTrack: function(t, e) {
                var i = t.touches;
                if (i) {
                    for (var n = {
                        points: [],
                        touches: [],
                        target: e,
                        event: t
                    }, r = 0, a = i[Ve]; a > r; r++) {
                        var o = i[r];
                        n.points.push([o.clientX, o.clientY]),
                        n.touches.push(o)
                    }
                    this._track.push(n)
                }
            },
            _recognize: function(t) {
                for (var e in n)
                    if (n.hasOwnProperty(e)) {
                        var i = n[e](this._track, t);
                        if (i)
                            return i
                    }
            }
        };
        var n = {
            pinch: function(i, n) {
                var r = i[Ve];
                if (r) {
                    var a = (i[r - 1] || {}).points
                      , o = (i[r - 2] || {}).points || a;
                    if (o && o[Ve] > 1 && a && a[Ve] > 1) {
                        var s = t(a) / t(o);
                        !isFinite(s) && (s = 1),
                        n.pinchScale = s;
                        var l = e(a);
                        return n.pinchX = l[0],
                        n.pinchY = l[1],
                        {
                            type: "pinch",
                            target: i[0][ze],
                            event: n
                        }
                    }
                }
            }
        };
        return i
    }),
    e("echarts/component/axis/AxisView", [li, si, v, "./AxisBuilder", m], function(t) {
        function e(t, e) {
            function i(t) {
                var e = n[_](t);
                return e.toGlobalCoord(e[f](0))
            }
            var n = t[de]
              , r = e.axis
              , a = {}
              , o = r[re]
              , s = r.onZero ? "onZero" : o
              , l = r.dim
              , u = n[fe]()
              , c = [u.x, u.x + u.width, u.y, u.y + u[He]]
              , h = {
                x: {
                    top: c[2],
                    bottom: c[3]
                },
                y: {
                    left: c[0],
                    right: c[1]
                }
            };
            h.x.onZero = Math.max(Math.min(i("y"), h.x[We]), h.x.top),
            h.y.onZero = Math.max(Math.min(i("x"), h.y.right), h.y.left),
            a[re] = ["y" === l ? h.y[s] : c[0], "x" === l ? h.x[s] : c[3]];
            var d = {
                x: 0,
                y: 1
            };
            a.rotation = Math.PI / 2 * d[l];
            var p = {
                top: -1,
                bottom: 1,
                left: -1,
                right: 1
            };
            a.labelDirection = a.tickDirection = a.nameDirection = p[o],
            r.onZero && (a.labelOffset = h[l][o] - h[l].onZero),
            e[Qe]("axisTick").get("inside") && (a.tickDirection = -a.tickDirection),
            e[Qe]("axisLabel").get("inside") && (a.labelDirection = -a.labelDirection);
            var m = e[Qe]("axisLabel").get("rotate");
            return a.labelRotation = "top" === s ? -m : m,
            a.labelInterval = r.getLabelInterval(),
            a.z2 = 1,
            a
        }
        var i = t(si)
          , n = t(v)
          , r = t("./AxisBuilder")
          , a = r.ifIgnoreOnTick
          , o = r.getInterval
          , s = ["axisLine", "axisLabel", "axisTick", "axisName"]
          , l = ["splitLine", "splitArea"]
          , u = t(m)[ye]({
            type: "axis",
            render: function(t, n) {
                if (this.group[pe](),
                t.get("show")) {
                    var a = n[W]("grid", t.get("gridIndex"))
                      , o = e(a, t)
                      , u = new r(t,o);
                    i.each(s, u.add, u),
                    this.group.add(u.getGroup()),
                    i.each(l, function(e) {
                        t.get(e + ".show") && this["_" + e](t, a, o.labelInterval)
                    }, this)
                }
            },
            _splitLine: function(t, e, i) {
                var r = t.axis
                  , s = t[Qe]("splitLine")
                  , l = s[Qe]("lineStyle")
                  , u = l.get("width")
                  , c = l.get("color")
                  , h = o(s, i);
                c = c instanceof Array ? c : [c];
                for (var d = e[de][fe](), f = r.isHorizontal(), p = [], m = 0, v = r.getTicksCoords(), g = [], y = [], x = 0; x < v[Ve]; x++)
                    if (!a(r, x, h)) {
                        var _ = r.toGlobalCoord(v[x]);
                        f ? (g[0] = _,
                        g[1] = d.y,
                        y[0] = _,
                        y[1] = d.y + d[He]) : (g[0] = d.x,
                        g[1] = _,
                        y[0] = d.x + d.width,
                        y[1] = _);
                        var b = m++ % c[Ve];
                        p[b] = p[b] || [],
                        p[b].push(new n.Line(n.subPixelOptimizeLine({
                            shape: {
                                x1: g[0],
                                y1: g[1],
                                x2: y[0],
                                y2: y[1]
                            },
                            style: {
                                lineWidth: u
                            },
                            silent: !0
                        })))
                    }
                for (var x = 0; x < p[Ve]; x++)
                    this.group.add(n.mergePath(p[x], {
                        style: {
                            stroke: c[x % c[Ve]],
                            lineDash: l.getLineDash(),
                            lineWidth: u
                        },
                        silent: !0
                    }))
            },
            _splitArea: function(t, e, i) {
                var r = t.axis
                  , s = t[Qe]("splitArea")
                  , l = s.get("areaStyle.color")
                  , u = e[de][fe]()
                  , c = r.getTicksCoords()
                  , h = r.toGlobalCoord(c[0])
                  , d = r.toGlobalCoord(c[0])
                  , f = []
                  , p = 0
                  , m = o(s, i);
                l = l instanceof Array ? l : [l];
                for (var v = 1; v < c[Ve]; v++)
                    if (!a(r, v, m)) {
                        var g, y, x, _, b = r.toGlobalCoord(c[v]);
                        r.isHorizontal() ? (g = h,
                        y = u.y,
                        x = b - g,
                        _ = u[He]) : (g = u.x,
                        y = d,
                        x = u.width,
                        _ = b - y);
                        var w = p++ % l[Ve];
                        f[w] = f[w] || [],
                        f[w].push(new n.Rect({
                            shape: {
                                x: g,
                                y: y,
                                width: x,
                                height: _
                            },
                            silent: !0
                        })),
                        h = g + x,
                        d = y + _
                    }
                for (var v = 0; v < f[Ve]; v++)
                    this.group.add(n.mergePath(f[v], {
                        style: {
                            fill: l[v % l[Ve]]
                        },
                        silent: !0
                    }))
            }
        });
        u[Ze]({
            type: "xAxis"
        }),
        u[Ze]({
            type: "yAxis"
        })
    }),
    e("zrender/Layer", [li, "./core/util", "./config"], function(t) {
        function e() {
            return !1
        }
        function i(t, e, i, n) {
            var r = document[D](e)
              , a = i[$e]()
              , o = i[Ye]()
              , s = r.style;
            return s[re] = "absolute",
            s.left = 0,
            s.top = 0,
            s.width = a + "px",
            s[He] = o + "px",
            r.width = a * n,
            r[He] = o * n,
            r.setAttribute("data-zr-dom-id", t),
            r
        }
        var n = t("./core/util")
          , r = t("./config")
          , a = function(t, a, o) {
            var s;
            o = o || r.devicePixelRatio,
            typeof t === ei ? s = i(t, ti, a, o) : n[Ge](t) && (s = t,
            t = s.id),
            this.id = t,
            this.dom = s;
            var l = s.style;
            l && (s.onselectstart = e,
            l["-webkit-user-select"] = "none",
            l["user-select"] = "none",
            l["-webkit-touch-callout"] = "none",
            l["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)"),
            this.domBack = null,
            this.ctxBack = null,
            this.painter = a,
            this.config = null,
            this.clearColor = 0,
            this.motionBlur = !1,
            this.lastFrameAlpha = .7,
            this.dpr = o
        };
        return a[ii] = {
            constructor: a,
            elCount: 0,
            __dirty: !0,
            initContext: function() {
                this.ctx = this.dom[P]("2d");
                var t = this.dpr;
                1 != t && this.ctx.scale(t, t)
            },
            createBackBuffer: function() {
                var t = this.dpr;
                this.domBack = i("back-" + this.id, ti, this.painter, t),
                this.ctxBack = this.domBack[P]("2d"),
                1 != t && this.ctxBack.scale(t, t)
            },
            resize: function(t, e) {
                var i = this.dpr
                  , n = this.dom
                  , r = n.style
                  , a = this.domBack;
                r.width = t + "px",
                r[He] = e + "px",
                n.width = t * i,
                n[He] = e * i,
                1 != i && this.ctx.scale(i, i),
                a && (a.width = t * i,
                a[He] = e * i,
                1 != i && this.ctxBack.scale(i, i))
            },
            clear: function(t) {
                var e = this.dom
                  , i = this.ctx
                  , n = e.width
                  , r = e[He]
                  , a = this.clearColor
                  , o = this.motionBlur && !t
                  , s = this.lastFrameAlpha
                  , l = this.dpr;
                if (o && (this.domBack || this.createBackBuffer(),
                this.ctxBack.globalCompositeOperation = "copy",
                this.ctxBack.drawImage(e, 0, 0, n / l, r / l)),
                i.clearRect(0, 0, n / l, r / l),
                a && (i.save(),
                i.fillStyle = this.clearColor,
                i.fillRect(0, 0, n / l, r / l),
                i.restore()),
                o) {
                    var u = this.domBack;
                    i.save(),
                    i.globalAlpha = s,
                    i.drawImage(u, 0, 0, n / l, r / l),
                    i.restore()
                }
            }
        },
        a
    }),
    e("echarts/component/axis/AxisBuilder", [li, si, v, "../../model/Model", r], function(t) {
        function e(t, e, i) {
            var n, r, a = u(e - t.rotation);
            return c(a) ? (r = i > 0 ? "top" : We,
            n = ae) : c(a - h) ? (r = i > 0 ? We : "top",
            n = ae) : (r = M,
            n = a > 0 && h > a ? i > 0 ? "right" : "left" : i > 0 ? "left" : "right"),
            {
                rotation: a,
                textAlign: n,
                textBaseline: r
            }
        }
        function i(t, e, i) {
            var n, r, a = u(-t.rotation), o = i[0] > i[1], s = "start" === e && !o || "start" !== e && o;
            return c(a - h / 2) ? (r = s ? We : "top",
            n = ae) : c(a - 1.5 * h) ? (r = s ? "top" : We,
            n = ae) : (r = M,
            n = 1.5 * h > a && a > h / 2 ? s ? "left" : "right" : s ? "right" : "left"),
            {
                rotation: a,
                textAlign: n,
                textBaseline: r
            }
        }
        var n = t(si)
          , a = t(v)
          , s = t("../../model/Model")
          , l = t(r)
          , u = l.remRadian
          , c = l.isRadianAroundZero
          , h = Math.PI
          , d = function(t, e) {
            this.opt = e,
            this.axisModel = t,
            n[Be](e, {
                labelOffset: 0,
                nameDirection: 1,
                tickDirection: 1,
                labelDirection: 1,
                silent: !0
            }),
            this.group = new a.Group({
                position: e[re].slice(),
                rotation: e.rotation
            })
        };
        d[ii] = {
            constructor: d,
            hasBuilder: function(t) {
                return !!p[t]
            },
            add: function(t) {
                p[t].call(this)
            },
            getGroup: function() {
                return this.group
            }
        };
        var p = {
            axisLine: function() {
                var t = this.opt
                  , e = this.axisModel;
                if (e.get("axisLine.show")) {
                    var i = this.axisModel.axis[$]();
                    this.group.add(new a.Line({
                        shape: {
                            x1: i[0],
                            y1: 0,
                            x2: i[1],
                            y2: 0
                        },
                        style: n[Ze]({
                            lineCap: "round"
                        }, e[Qe]("axisLine.lineStyle").getLineStyle()),
                        strokeContainThreshold: t.strokeContainThreshold,
                        silent: !!t.silent,
                        z2: 1
                    }))
                }
            },
            axisTick: function() {
                var t = this.axisModel;
                if (t.get("axisTick.show")) {
                    for (var e = t.axis, i = t[Qe]("axisTick"), n = this.opt, r = i[Qe]("lineStyle"), o = i.get(Ve), s = g(i, n.labelInterval), l = e.getTicksCoords(), u = [], c = 0; c < l[Ve]; c++)
                        if (!m(e, c, s)) {
                            var h = l[c];
                            u.push(new a.Line(a.subPixelOptimizeLine({
                                shape: {
                                    x1: h,
                                    y1: 0,
                                    x2: h,
                                    y2: n.tickDirection * o
                                },
                                style: {
                                    lineWidth: r.get("width")
                                },
                                silent: !0
                            })))
                        }
                    this.group.add(a.mergePath(u, {
                        style: r.getLineStyle(),
                        silent: !0
                    }))
                }
            },
            axisLabel: function() {
                function t(t, e) {
                    var i = t && t[se]().clone()
                      , n = e && e[se]().clone();
                    return i && n ? (i[F](t.getLocalTransform()),
                    n[F](e.getLocalTransform()),
                    i.intersect(n)) : void 0
                }
                var i = this.axisModel;
                if (i.get("axisLabel.show")) {
                    var n = this.opt
                      , r = i.axis
                      , o = i[Qe]("axisLabel")
                      , l = o[Qe](he)
                      , u = o.get("margin")
                      , c = r.scale[Q]()
                      , d = i.getFormattedLabels()
                      , p = n.labelRotation;
                    null == p && (p = o.get("rotate") || 0),
                    p = p * h / 180;
                    for (var v = e(n, p, n.labelDirection), g = i.get("data"), y = [], _ = 0; _ < c[Ve]; _++)
                        if (!m(r, _, n.labelInterval)) {
                            var b = l;
                            g && g[_] && g[_][he] && (b = new s(g[_][he],l,i[q]));
                            var w = r[f](c[_])
                              , M = [w, n.labelOffset + n.labelDirection * u]
                              , S = new a.Text({
                                style: {
                                    text: d[_],
                                    textAlign: b.get("align", !0) || v[ce],
                                    textBaseline: b.get("baseline", !0) || v.textBaseline,
                                    textFont: b[ue](),
                                    fill: b[le]()
                                },
                                position: M,
                                rotation: v.rotation,
                                silent: !0,
                                z2: 10
                            });
                            y.push(S),
                            this.group.add(S)
                        }
                    if (r.type !== x) {
                        if (i.get("min")) {
                            var C = y[0]
                              , T = y[1];
                            t(C, T) && (C[qe] = !0)
                        }
                        if (i.get("max")) {
                            var A = y[y[Ve] - 1]
                              , z = y[y[Ve] - 2];
                            t(z, A) && (A[qe] = !0)
                        }
                    }
                }
            },
            axisName: function() {
                var t = this.opt
                  , n = this.axisModel
                  , r = this.opt.axisName;
                if (null == r && (r = n.get("name")),
                r) {
                    var o, s = n.get("nameLocation"), l = t.nameDirection, u = n[Qe]("nameTextStyle"), c = n.get("nameGap") || 0, h = this.axisModel.axis[$](), d = h[0] > h[1] ? -1 : 1, f = ["start" === s ? h[0] - d * c : "end" === s ? h[1] + d * c : (h[0] + h[1]) / 2, s === M ? t.labelOffset + l * c : 0];
                    o = s === M ? e(t, t.rotation, l) : i(t, s, h),
                    this.group.add(new a.Text({
                        style: {
                            text: r,
                            textFont: u[ue](),
                            fill: u[le]() || n.get("axisLine.lineStyle.color"),
                            textAlign: o[ce],
                            textBaseline: o.textBaseline
                        },
                        position: f,
                        rotation: o.rotation,
                        silent: !0,
                        z2: 1
                    }))
                }
            }
        }
          , m = d.ifIgnoreOnTick = function(t, e, i) {
            var n, r = t.scale;
            return r.type === y && (typeof i === xe ? (n = r[Q]()[e],
            !i(n, r[K](n))) : e % (i + 1))
        }
          , g = d.getInterval = function(t, e) {
            var i = t.get(o);
            return (null == i || "auto" == i) && (i = e),
            i
        }
        ;
        return d
    }),
    e("echarts/ExtensionAPI", [li, si], function(t) {
        function e(t) {
            i.each(n, function(e) {
                this[e] = i.bind(t[e], t)
            }, this)
        }
        var i = t(si)
          , n = ["getDom", "getZr", $e, Ye, Ee, "on", "off", "getDataURL", "getConnectedDataURL", Qe, "getOption"];
        return e
    }),
    e("echarts/preprocessor/helper/compatStyle", [li, si], function(t) {
        function e(t) {
            var e = t && t.itemStyle;
            e && i.each(n, function(n) {
                var r = e[B]
                  , a = e[E];
                r && r[n] && (t[n] = t[n] || {},
                t[n][B] ? i.merge(t[n][B], r[n]) : t[n][B] = r[n],
                r[n] = null),
                a && a[n] && (t[n] = t[n] || {},
                t[n][E] ? i.merge(t[n][E], a[n]) : t[n][E] = a[n],
                a[n] = null)
            })
        }
        var i = t(si)
          , n = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"];
        return function(t) {
            e(t);
            var n = t.data;
            if (n) {
                for (var r = 0; r < n[Ve]; r++)
                    e(n[r]);
                var a = t.markPoint;
                if (a && a.data)
                    for (var o = a.data, r = 0; r < o[Ve]; r++)
                        e(o[r]);
                var s = t.markLine;
                if (s && s.data)
                    for (var l = s.data, r = 0; r < l[Ve]; r++)
                        i[be](l[r]) ? (e(l[r][0]),
                        e(l[r][1])) : e(l[r])
            }
        }
    }),
    e("echarts/chart/helper/SymbolDraw", [li, v, "./Symbol"], function(t) {
        function e(t) {
            this.group = new n.Group,
            this._symbolCtor = t || r
        }
        function i(t, e, i) {
            var n = t.getItemLayout(e);
            return !(!n || isNaN(n[0]) || isNaN(n[1]) || i && i(e) || "none" === t[p](e, u))
        }
        var n = t(v)
          , r = t("./Symbol")
          , a = e[ii];
        return a[c] = function(t, e) {
            var r = this.group
              , a = t[Ae]
              , o = this._data
              , s = this._symbolCtor;
            t.diff(o).add(function(n) {
                var a = t.getItemLayout(n);
                if (i(t, n, e)) {
                    var o = new s(t,n);
                    o.attr(re, a),
                    t.setItemGraphicEl(n, o),
                    r.add(o)
                }
            })[Fe](function(l, u) {
                var h = o[O](u)
                  , d = t.getItemLayout(l);
                return i(t, l, e) ? (h ? (h[c](t, l),
                n.updateProps(h, {
                    position: d
                }, a)) : (h = new s(t,l),
                h.attr(re, d)),
                r.add(h),
                void t.setItemGraphicEl(l, h)) : void r[Ne](h)
            })[Ne](function(t) {
                var e = o[O](t);
                e && e.fadeOut(function() {
                    r[Ne](e)
                })
            }).execute(),
            this._data = t
        }
        ,
        a.updateLayout = function() {
            var t = this._data;
            t && t[I](function(e, i) {
                e.attr(re, t.getItemLayout(i))
            })
        }
        ,
        a[Ne] = function(t) {
            var e = this.group
              , i = this._data;
            i && (t ? i[I](function(t) {
                t.fadeOut(function() {
                    e[Ne](t)
                })
            }) : e[pe]())
        }
        ,
        e
    }),
    e("echarts/chart/helper/Symbol", [li, si, "../../util/symbol", v, r], function(t) {
        function e(t) {
            return a[be](t) || (t = [+t, +t]),
            t
        }
        function i(t, e) {
            s.Group.call(this),
            this[c](t, e)
        }
        function n(t, e) {
            this[R].drift(t, e)
        }
        var a = t(si)
          , o = t("../../util/symbol")
          , s = t(v)
          , h = t(r)
          , d = i[ii];
        d._createSymbol = function(t, i, r) {
            this[pe]();
            var a = i[Ae]
              , u = i[p](r, "color")
              , c = o.createSymbol(t, -.5, -.5, 1, 1, u);
            c.attr({
                style: {
                    strokeNoScale: !0
                },
                z2: 100,
                culling: !0,
                scale: [0, 0]
            }),
            c.drift = n;
            var h = e(i[p](r, l));
            s.initProps(c, {
                scale: h
            }, a),
            this._symbolType = t,
            this.add(c)
        }
        ,
        d.stopSymbolAnimation = function(t) {
            this.childAt(0).stopAnimation(t)
        }
        ,
        d.getScale = function() {
            return this.childAt(0).scale
        }
        ,
        d.highlight = function() {
            this.childAt(0)[Re](E)
        }
        ,
        d.downplay = function() {
            this.childAt(0)[Re](B)
        }
        ,
        d.setZ = function(t, e) {
            var i = this.childAt(0);
            i[Se] = t,
            i.z = e
        }
        ,
        d.setDraggable = function(t) {
            var e = this.childAt(0);
            e.draggable = t,
            e.cursor = t ? "move" : "pointer"
        }
        ,
        d[c] = function(t, i) {
            var n = t[p](i, u) || "circle"
              , r = t[Ae]
              , a = e(t[p](i, l));
            if (n !== this._symbolType)
                this._createSymbol(n, t, i);
            else {
                var o = this.childAt(0);
                s.updateProps(o, {
                    scale: a
                }, r)
            }
            this._updateCommon(t, i, a),
            this._seriesModel = r
        }
        ;
        var f = ["itemStyle", B]
          , m = ["itemStyle", E]
          , g = ["label", B]
          , y = ["label", E];
        return d._updateCommon = function(t, i, n) {
            var r = this.childAt(0)
              , o = t[Ae]
              , u = t[T](i)
              , c = u[Qe](f)
              , d = t[p](i, "color")
              , v = u[Qe](m).getItemStyle();
            r.rotation = u[V]("symbolRotate") * Math.PI / 180 || 0;
            var x = u[V]("symbolOffset");
            if (x) {
                var _ = r[re];
                _[0] = h[S](x[0], n[0]),
                _[1] = h[S](x[1], n[1])
            }
            r.setColor(d),
            a[Ze](r.style, c.getItemStyle(["color"]));
            var b = u[Qe](g)
              , w = u[Qe](y)
              , M = t[U][t[U][Ve] - 1]
              , C = r.style;
            b.get("show") ? (s.setText(C, b, d),
            C.text = o.getFormattedLabel(i, B) || t.get(M, i)) : C.text = "",
            w[V]("show") ? (s.setText(v, w, d),
            v.text = o.getFormattedLabel(i, E) || t.get(M, i)) : v.text = "";
            var A = e(t[p](i, l));
            if (r.off(ke).off(Le).off(E).off(B),
            s[Z](r, v),
            u[V]("hoverAnimation")) {
                var z = function() {
                    var t = A[1] / A[0];
                    this.animateTo({
                        scale: [Math.max(1.1 * A[0], A[0] + 3), Math.max(1.1 * A[1], A[1] + 3 * t)]
                    }, 400, "elasticOut")
                }
                  , L = function() {
                    this.animateTo({
                        scale: A
                    }, 400, "elasticOut")
                };
                r.on(ke, z).on(Le, L).on(E, z).on(B, L)
            }
        }
        ,
        d.fadeOut = function(t) {
            var e = this.childAt(0);
            e.style.text = "",
            s.updateProps(e, {
                scale: [0, 0]
            }, this._seriesModel, t)
        }
        ,
        a[ve](i, s.Group),
        i
    }),
    e("echarts/chart/line/lineAnimationDiff", [li, "zrender/core/arrayDiff"], function(t) {
        function e(t) {
            return t >= 0 ? 1 : -1
        }
        function i(t, i, n) {
            for (var r, a = t.getBaseAxis(), o = t.getOtherAxis(a), s = a.onZero ? 0 : o.scale[$]()[0], l = o.dim, u = "x" === l || l === d ? 1 : 0, c = i.stackedOn, h = i.get(l, n); c && e(c.get(l, n)) === e(h); ) {
                r = c;
                break
            }
            var f = [];
            return f[u] = i.get(a.dim, n),
            f[1 - u] = r ? r.get(l, n, !0) : s,
            t[g](f)
        }
        var n = t("zrender/core/arrayDiff");
        return function(t, e, r, a, o, s) {
            for (var l = e[h](e.getId), u = t[h](t.getId), c = [], d = [], f = [], p = [], m = [], v = [], y = [], x = n(u, l), _ = s[U], b = 0; b < x[Ve]; b++) {
                var w = x[b]
                  , M = !0;
                switch (w.cmd) {
                case "=":
                    var S = t.getItemLayout(w.idx)
                      , C = e.getItemLayout(w.idx1);
                    (isNaN(S[0]) || isNaN(S[1])) && (S = C.slice()),
                    c.push(S),
                    d.push(C),
                    f.push(r[w.idx]),
                    p.push(a[w.idx1]),
                    y.push(e.getRawIndex(w.idx1));
                    break;
                case "+":
                    var T = w.idx;
                    c.push(o[g]([e.get(_[0], T, !0), e.get(_[1], T, !0)])),
                    d.push(e.getItemLayout(T).slice()),
                    f.push(i(o, e, T)),
                    p.push(a[T]),
                    y.push(e.getRawIndex(T));
                    break;
                case "-":
                    var T = w.idx
                      , A = t.getRawIndex(T);
                    A !== T ? (c.push(t.getItemLayout(T)),
                    d.push(s[g]([t.get(_[0], T, !0), t.get(_[1], T, !0)])),
                    f.push(r[T]),
                    p.push(i(s, t, T)),
                    y.push(A)) : M = !1
                }
                M && (m.push(w),
                v.push(v[Ve]))
            }
            v.sort(function(t, e) {
                return y[t] - y[e]
            });
            for (var z = [], L = [], k = [], P = [], D = [], b = 0; b < v[Ve]; b++) {
                var T = v[b];
                z[b] = c[T],
                L[b] = d[T],
                k[b] = f[T],
                P[b] = p[T],
                D[b] = m[T]
            }
            return {
                current: z,
                next: L,
                stackedOnCurrent: k,
                stackedOnNext: P,
                status: D
            }
        }
    }),
    e("echarts/chart/line/poly", [li, "zrender/graphic/Path", oi], function(t) {
        function e(t, e, i, n, d, f, p, m, v, g) {
            for (var y = i, x = 0; d > x; x++) {
                var _ = e[y];
                if (y >= n || 0 > y || isNaN(_[0]) || isNaN(_[1]))
                    break;
                if (y === i)
                    t[f > 0 ? "moveTo" : "lineTo"](_[0], _[1]),
                    l(c, _);
                else if (v > 0) {
                    var b = y - f
                      , w = y + f
                      , M = .5
                      , S = e[b]
                      , C = e[w];
                    if (f > 0 && (y === d - 1 || isNaN(C[0]) || isNaN(C[1])) || 0 >= f && (0 === y || isNaN(C[0]) || isNaN(C[1])))
                        l(h, _);
                    else {
                        (isNaN(C[0]) || isNaN(C[1])) && (C = _),
                        r.sub(u, C, S);
                        var T, A;
                        if ("x" === g || "y" === g) {
                            var z = "x" === g ? 0 : 1;
                            T = Math.abs(_[z] - S[z]),
                            A = Math.abs(_[z] - C[z])
                        } else
                            T = r.dist(_, S),
                            A = r.dist(_, C);
                        M = A / (A + T),
                        s(h, _, u, -v * (1 - M))
                    }
                    a(c, c, m),
                    o(c, c, p),
                    a(h, h, m),
                    o(h, h, p),
                    t.bezierCurveTo(c[0], c[1], h[0], h[1], _[0], _[1]),
                    s(c, _, u, v * M)
                } else
                    t.lineTo(_[0], _[1]);
                y += f
            }
            return x
        }
        function i(t, e) {
            var i = [1 / 0, 1 / 0]
              , n = [-1 / 0, -1 / 0];
            if (e)
                for (var r = 0; r < t[Ve]; r++) {
                    var a = t[r];
                    a[0] < i[0] && (i[0] = a[0]),
                    a[1] < i[1] && (i[1] = a[1]),
                    a[0] > n[0] && (n[0] = a[0]),
                    a[1] > n[1] && (n[1] = a[1])
                }
            return {
                min: e ? i : n,
                max: e ? n : i
            }
        }
        var n = t("zrender/graphic/Path")
          , r = t(oi)
          , a = r.min
          , o = r.max
          , s = r.scaleAndAdd
          , l = r.copy
          , u = []
          , c = []
          , h = [];
        return {
            Polyline: n[Ze]({
                type: "ec-polyline",
                shape: {
                    points: [],
                    smooth: 0,
                    smoothConstraint: !0,
                    smoothMonotone: null
                },
                style: {
                    fill: null,
                    stroke: "#000"
                },
                buildPath: function(t, n) {
                    for (var r = n.points, a = 0, o = r[Ve], s = i(r, n.smoothConstraint); o > a; )
                        a += e(t, r, a, o, o, 1, s.min, s.max, n.smooth, n.smoothMonotone) + 1
                }
            }),
            Polygon: n[Ze]({
                type: "ec-polygon",
                shape: {
                    points: [],
                    stackedOnPoints: [],
                    smooth: 0,
                    stackedOnSmooth: 0,
                    smoothConstraint: !0,
                    smoothMonotone: null
                },
                buildPath: function(t, n) {
                    for (var r = n.points, a = n.stackedOnPoints, o = 0, s = r[Ve], l = n.smoothMonotone, u = i(r, n.smoothConstraint), c = i(a, n.smoothConstraint); s > o; ) {
                        var h = e(t, r, o, s, s, 1, u.min, u.max, n.smooth, l);
                        e(t, a, o + h - 1, s, h, -1, c.min, c.max, n.stackedOnSmooth, l),
                        o += h + 1,
                        t.closePath()
                    }
                }
            })
        }
    }),
    e("echarts/component/helper/listComponent", [li, "../../util/layout", "../../util/format", v], function(t) {
        function e(t, e, n) {
            i.positionGroup(t, e.getBoxLayoutParams(), {
                width: n[$e](),
                height: n[Ye]()
            }, e.get("padding"))
        }
        var i = t("../../util/layout")
          , n = t("../../util/format")
          , r = t(v);
        return {
            layout: function(t, n, r) {
                var o = i[oe](n.getBoxLayoutParams(), {
                    width: r[$e](),
                    height: r[Ye]()
                }, n.get("padding"));
                i.box(n.get(a), t, n.get("itemGap"), o.width, o[He]),
                e(t, n, r)
            },
            addBackground: function(t, e) {
                var i = n.normalizeCssArray(e.get("padding"))
                  , a = t[se]()
                  , o = e.getItemStyle(["color", ie]);
                o.fill = e.get(Xe);
                var s = new r.Rect({
                    shape: {
                        x: a.x - i[3],
                        y: a.y - i[0],
                        width: a.width + i[1] + i[3],
                        height: a[He] + i[0] + i[2]
                    },
                    style: o,
                    silent: !0,
                    z2: -1
                });
                r.subPixelOptimizeRect(s),
                t.add(s)
            }
        }
    }),
    e("echarts/util/symbol", [li, "./graphic", "zrender/core/BoundingRect"], function(t) {
        var e = t("./graphic")
          , n = t("zrender/core/BoundingRect")
          , r = e.extendShape({
            type: "triangle",
            shape: {
                cx: 0,
                cy: 0,
                width: 0,
                height: 0
            },
            buildPath: function(t, e) {
                var i = e.cx
                  , n = e.cy
                  , r = e.width / 2
                  , a = e[He] / 2;
                t.moveTo(i, n - a),
                t.lineTo(i + r, n + a),
                t.lineTo(i - r, n + a),
                t.closePath()
            }
        })
          , a = e.extendShape({
            type: "diamond",
            shape: {
                cx: 0,
                cy: 0,
                width: 0,
                height: 0
            },
            buildPath: function(t, e) {
                var i = e.cx
                  , n = e.cy
                  , r = e.width / 2
                  , a = e[He] / 2;
                t.moveTo(i, n - a),
                t.lineTo(i + r, n),
                t.lineTo(i, n + a),
                t.lineTo(i - r, n),
                t.closePath()
            }
        })
          , o = e.extendShape({
            type: "pin",
            shape: {
                x: 0,
                y: 0,
                width: 0,
                height: 0
            },
            buildPath: function(t, e) {
                var i = e.x
                  , n = e.y
                  , r = e.width / 5 * 3
                  , a = Math.max(r, e[He])
                  , o = r / 2
                  , s = o * o / (a - o)
                  , l = n - a + o + s
                  , u = Math.asin(s / o)
                  , c = Math.cos(u) * o
                  , h = Math.sin(u)
                  , d = Math.cos(u);
                t.arc(i, l, o, Math.PI - u, 2 * Math.PI + u);
                var f = .6 * o
                  , p = .7 * o;
                t.bezierCurveTo(i + c - h * f, l + s + d * f, i, n - p, i, n),
                t.bezierCurveTo(i, n - p, i - c + h * f, l + s + d * f, i - c, l + s),
                t.closePath()
            }
        })
          , s = e.extendShape({
            type: "arrow",
            shape: {
                x: 0,
                y: 0,
                width: 0,
                height: 0
            },
            buildPath: function(t, e) {
                var i = e[He]
                  , n = e.width
                  , r = e.x
                  , a = e.y
                  , o = n / 3 * 2;
                t.moveTo(r, a),
                t.lineTo(r + o, a + i),
                t.lineTo(r, a + i / 4 * 3),
                t.lineTo(r - o, a + i),
                t.lineTo(r, a),
                t.closePath()
            }
        })
          , l = {
            line: e.Line,
            rect: e.Rect,
            roundRect: e.Rect,
            square: e.Rect,
            circle: e.Circle,
            diamond: a,
            pin: o,
            arrow: s,
            triangle: r
        }
          , u = {
            line: function(t, e, i, n, r) {
                r.x1 = t,
                r.y1 = e + n / 2,
                r.x2 = t + i,
                r.y2 = e + n / 2
            },
            rect: function(t, e, i, n, r) {
                r.x = t,
                r.y = e,
                r.width = i,
                r[He] = n
            },
            roundRect: function(t, e, i, n, r) {
                r.x = t,
                r.y = e,
                r.width = i,
                r[He] = n,
                r.r = Math.min(i, n) / 4
            },
            square: function(t, e, i, n, r) {
                var a = Math.min(i, n);
                r.x = t,
                r.y = e,
                r.width = a,
                r[He] = a
            },
            circle: function(t, e, i, n, r) {
                r.cx = t + i / 2,
                r.cy = e + n / 2,
                r.r = Math.min(i, n) / 2
            },
            diamond: function(t, e, i, n, r) {
                r.cx = t + i / 2,
                r.cy = e + n / 2,
                r.width = i,
                r[He] = n
            },
            pin: function(t, e, i, n, r) {
                r.x = t + i / 2,
                r.y = e + n / 2,
                r.width = i,
                r[He] = n
            },
            arrow: function(t, e, i, n, r) {
                r.x = t + i / 2,
                r.y = e + n / 2,
                r.width = i,
                r[He] = n
            },
            triangle: function(t, e, i, n, r) {
                r.cx = t + i / 2,
                r.cy = e + n / 2,
                r.width = i,
                r[He] = n
            }
        }
          , c = {};
        for (var h in l)
            c[h] = new l[h];
        var d = e.extendShape({
            type: "symbol",
            shape: {
                symbolType: "",
                x: 0,
                y: 0,
                width: 0,
                height: 0
            },
            beforeBrush: function() {
                var t = this.style
                  , e = this.shape;
                "pin" === e.symbolType && "inside" === t.textPosition && (t.textPosition = ["50%", "40%"],
                t[ce] = ae,
                t.textBaseline = M)
            },
            buildPath: function(t, e) {
                var n = e.symbolType
                  , r = c[n];
                "none" !== e.symbolType && (r || (n = "rect",
                r = c[n]),
                u[n](e.x, e.y, e.width, e[He], r.shape),
                r[i](t, r.shape))
            }
        })
          , f = function(t) {
            if ("image" !== this.type) {
                var e = this.style
                  , i = this.shape;
                i && "line" === i.symbolType ? e[N] = t : this.__isEmptyBrush ? (e[N] = t,
                e.fill = "#fff") : (e.fill && (e.fill = t),
                e[N] && (e[N] = t)),
                this.dirty()
            }
        }
          , p = {
            createSymbol: function(t, i, r, a, o, s) {
                var l = 0 === t[_e]("empty");
                l && (t = t.substr(5, 1)[ni]() + t.substr(6));
                var u;
                return u = 0 === t[_e]("image://") ? new e.Image({
                    style: {
                        image: t.slice(8),
                        x: i,
                        y: r,
                        width: a,
                        height: o
                    }
                }) : 0 === t[_e]("path://") ? e.makePath(t.slice(7), {}, new n(i,r,a,o)) : new d({
                    shape: {
                        symbolType: t,
                        x: i,
                        y: r,
                        width: a,
                        height: o
                    }
                }),
                u.__isEmptyBrush = l,
                u.setColor = f,
                u.setColor(s),
                u
            }
        };
        return p
    }),
    e("echarts/component/marker/markerHelper", [li, si, r], function(t) {
        function e(t, e, i) {
            var n = -1;
            do
                n = Math.max(a.getPrecision(t.get(e, i)), n),
                t = t.stackedOn;
            while (t);return n
        }
        function i(t, i, n, r, a, o) {
            var s = []
              , l = f(i, r, t)
              , u = i.indexOfNearest(r, l, !0);
            s[a] = i.get(n, u, !0),
            s[o] = i.get(r, u, !0);
            var c = e(i, r, u);
            return c >= 0 && (s[o] = +s[o][w](c)),
            s
        }
        var n = t(si)
          , a = t(r)
          , o = n[_e]
          , s = n.curry
          , l = {
            min: s(i, "min"),
            max: s(i, "max"),
            average: s(i, "average")
        }
          , u = function(t, e) {
            var i = t[Pe]()
              , r = t[de];
            if ((isNaN(e.x) || isNaN(e.y)) && !n[be](e.coord) && r) {
                var a = c(e, i, r, t);
                if (e = n.clone(e),
                e.type && l[e.type] && a.baseAxis && a.valueAxis) {
                    var s = r[U]
                      , u = o(s, a.baseAxis.dim)
                      , h = o(s, a.valueAxis.dim);
                    e.coord = l[e.type](i, a.baseDataDim, a.valueDataDim, u, h),
                    e.value = e.coord[h]
                } else
                    e.coord = [null != e.xAxis ? e.xAxis : e.radiusAxis, null != e.yAxis ? e.yAxis : e.angleAxis]
            }
            return e
        }
          , c = function(t, e, i, n) {
            var r = {};
            return null != t.valueIndex || null != t.valueDim ? (r.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) : t.valueDim,
            r.valueAxis = i[_](n.getCoordDimensionInfo(r.valueDataDim).name),
            r.baseAxis = i.getOtherAxis(r.valueAxis),
            r.baseDataDim = n.getDimensionsOnAxis(r.baseAxis.dim)[0]) : (r.baseAxis = n.getBaseAxis(),
            r.valueAxis = i.getOtherAxis(r.baseAxis),
            r.baseDataDim = n.getDimensionsOnAxis(r.baseAxis.dim)[0],
            r.valueDataDim = n.getDimensionsOnAxis(r.valueAxis.dim)[0]),
            r
        }
          , h = function(t, e) {
            return t && e.coord && (null == e.x || null == e.y) ? t.containData(e.coord) : !0
        }
          , d = function(t, e, i, n) {
            return 2 > n ? t.coord && t.coord[n] : void t.value
        }
          , f = function(t, e, i) {
            return "average" === i ? t.getSum(e, !0) / t.count() : t.getDataExtent(e, !0)["max" === i ? 1 : 0]
        };
        return {
            dataTransform: u,
            dataFilter: h,
            dimValueGetter: d,
            getAxisInfo: c,
            numCalculate: f
        }
    }),
    e("echarts/component/tooltip/TooltipContent", [li, si, "zrender/tool/color", "zrender/core/event", "../../util/format"], function(t) {
        function e(t) {
            var e = "cubic-bezier(0.23, 1, 0.32, 1)"
              , i = "left " + t + "s " + e + ",top " + t + "s " + e;
            return s.map(p, function(t) {
                return t + "transition:" + i
            }).join(";")
        }
        function i(t) {
            var e = []
              , i = t.get("fontSize")
              , n = t[le]();
            return n && e.push("color:" + n),
            e.push("font:" + t[ue]()),
            i && e.push("line-height:" + Math.round(3 * i / 2) + "px"),
            h(["decoration", "align"], function(i) {
                var n = t.get(i);
                n && e.push("text-" + i + ":" + n)
            }),
            e.join(";")
        }
        function r(t) {
            t = t;
            var n = []
              , r = t.get("transitionDuration")
              , a = t.get(Xe)
              , o = t[Qe](he)
              , s = t.get("padding");
            return r && n.push(e(r)),
            a && (n.push("background-Color:" + l.toHex(a)),
            n.push("filter:alpha(opacity=70)"),
            n.push("background-Color:" + a)),
            h(["width", "color", d], function(e) {
                var i = "border-" + e
                  , r = f(i)
                  , a = t.get(r);
                null != a && n.push(i + ":" + a + ("color" === e ? "" : "px"))
            }),
            n.push(i(o)),
            null != s && n.push("padding:" + c.normalizeCssArray(s).join("px ") + "px"),
            n.join(";") + ";"
        }
        function a(t, e) {
            var i = document[D]("div")
              , r = e.getZr();
            this.el = i,
            this._x = e[$e]() / 2,
            this._y = e[Ye]() / 2,
            t.appendChild(i),
            this._container = t,
            this._show = !1,
            this._hideTimeout;
            var a = this;
            i.onmouseenter = function() {
                a.enterable && (clearTimeout(a._hideTimeout),
                a._show = !0),
                a._inContent = !0
            }
            ,
            i.onmousemove = function(e) {
                if (!a.enterable) {
                    var i = r.handler;
                    u.normalizeEvent(t, e),
                    i.dispatch(n, e)
                }
            }
            ,
            i.onmouseleave = function() {
                a.enterable && a._show && a.hideLater(a._hideDelay),
                a._inContent = !1
            }
            ,
            o(i, t)
        }
        function o(t, e) {
            function i(t) {
                n(t[ze]) && t.preventDefault()
            }
            function n(i) {
                for (; i && i !== e; ) {
                    if (i === t)
                        return !0;
                    i = i.parentNode
                }
            }
            u.addEventListener(e, "touchstart", i),
            u.addEventListener(e, "touchmove", i),
            u.addEventListener(e, "touchend", i)
        }
        var s = t(si)
          , l = t("zrender/tool/color")
          , u = t("zrender/core/event")
          , c = t("../../util/format")
          , h = s.each
          , f = c.toCamelCase
          , p = ["", "-webkit-", "-moz-", "-o-"]
          , m = "position:absolute;display:block;border-style:solid;white-space:nowrap;";
        return a[ii] = {
            constructor: a,
            enterable: !0,
            update: function() {
                var t = this._container
                  , e = t.currentStyle || document.defaultView.getComputedStyle(t)
                  , i = t.style;
                "absolute" !== i[re] && "absolute" !== e[re] && (i[re] = "relative"),
                this.hide()
            },
            show: function(t) {
                clearTimeout(this._hideTimeout),
                this.el.style.cssText = m + r(t) + ";left:" + this._x + "px;top:" + this._y + "px;",
                this._show = !0
            },
            setContent: function(t) {
                var e = this.el;
                e.innerHTML = t,
                e.style.display = t ? "block" : "none"
            },
            moveTo: function(t, e) {
                var i = this.el.style;
                i.left = t + "px",
                i.top = e + "px",
                this._x = t,
                this._y = e
            },
            hide: function() {
                this.el.style.display = "none",
                this._show = !1
            },
            hideLater: function(t) {
                !this._show || this._inContent && this.enterable || (t ? (this._hideDelay = t,
                this._show = !1,
                this._hideTimeout = setTimeout(s.bind(this.hide, this), t)) : this.hide())
            },
            isShow: function() {
                return this._show
            }
        },
        a
    }),
    e("echarts/chart/helper/LineDraw", [li, v, "./Line"], function(t) {
        function e(t) {
            this._ctor = t || n,
            this.group = new i.Group
        }
        var i = t(v)
          , n = t("./Line")
          , r = e[ii];
        return r[c] = function(t, e, i) {
            var n = this._lineData
              , r = this.group
              , a = this._ctor;
            t.diff(n).add(function(n) {
                var o = new a(t,e,i,n);
                t.setItemGraphicEl(n, o),
                r.add(o)
            })[Fe](function(a, o) {
                var s = n[O](o);
                s[c](t, e, i, a),
                t.setItemGraphicEl(a, s),
                r.add(s)
            })[Ne](function(t) {
                r[Ne](n[O](t))
            }).execute(),
            this._lineData = t,
            this._fromData = e,
            this._toData = i
        }
        ,
        r.updateLayout = function() {
            var t = this._lineData;
            t[I](function(e, i) {
                e.updateLayout(t, this._fromData, this._toData, i)
            }, this)
        }
        ,
        r[Ne] = function() {
            this.group[pe]()
        }
        ,
        e
    }),
    e("echarts/util/throttle", [], function() {
        var t = {}
          , e = "\x00__throttleOriginMethod"
          , i = "\x00__throttleRate";
        return t.throttle = function(t, e, i, n) {
            function r(r) {
                function f() {
                    c = (new Date).getTime(),
                    h = null,
                    (d ? t : t[r]).apply(o, s || [])
                }
                var p = function() {
                    l = (new Date).getTime(),
                    o = this,
                    s = arguments,
                    a = l - (n ? u : c) - e,
                    clearTimeout(h),
                    n ? i ? h = setTimeout(f, e) : a >= 0 && f() : a >= 0 ? f() : i && (h = setTimeout(f, -a)),
                    u = l
                };
                return p.clear = function() {
                    h && (clearTimeout(h),
                    h = null)
                }
                ,
                p
            }
            var a, o, s, l = (new Date).getTime(), u = 0, c = 0, h = null, d = typeof t === xe;
            if (e = e || 0,
            d)
                return r();
            for (var f = [], p = 0; p < t[Ve]; p++)
                f[p] = r(p);
            return f
        }
        ,
        t.fixRate = function(e, i) {
            return null != i ? t.throttle(e, i, !0, !1) : e
        }
        ,
        t.debounce = function(e, i) {
            return null != i ? t.throttle(e, i, !0, !0) : e
        }
        ,
        t.createOrUpdate = function(n, r, a, o) {
            var s = n[r];
            if (s && null != a && o) {
                var l = s[e] || s
                  , u = s[i];
                u !== a && (s = n[r] = t[o](l, a),
                s[e] = l,
                s[i] = a)
            }
        }
        ,
        t.clear = function(t, i) {
            var n = t[i];
            n && n[e] && (t[i] = n[e])
        }
        ,
        t
    }),
    e("echarts/component/helper/sliderMove", [li], function() {
        return function(t, e, i, n, r) {
            function a(t, e, i) {
                var n = e[Ve] ? e.slice() : [e, e];
                return e[0] > e[1] && n.reverse(),
                0 > t && n[0] + t < i[0] && (t = i[0] - n[0]),
                t > 0 && n[1] + t > i[1] && (t = i[1] - n[1]),
                t
            }
            return t ? ("rigid" === n ? (t = a(t, e, i),
            e[0] += t,
            e[1] += t) : (t = a(t, e[r], i),
            e[r] += t,
            "push" === n && e[0] > e[1] && (e[1 - r] = e[r])),
            e) : e
        }
    }),
    e("echarts/visual/VisualMapping", [li, si, "zrender/tool/color", ee], function(t) {
        function e(t) {
            var e = t.pieceList;
            t.hasSpecialVisual = !1,
            h.each(e, function(e, i) {
                e.originIndex = i,
                e.visual && (t.hasSpecialVisual = !0)
            })
        }
        function i(t) {
            var e = t.categories
              , i = t.visual
              , n = h[be](i);
            if (!e) {
                if (n)
                    return;
                throw new Error
            }
            var r = t.categoryMap = {};
            if (p(e, function(t, e) {
                r[t] = e
            }),
            !n) {
                var a = [];
                h[Ge](i) ? p(i, function(t, e) {
                    var i = r[e];
                    a[null != i ? i : v] = t
                }) : a[v] = i,
                i = t.visual = a
            }
            for (var o = e[Ve] - 1; o >= 0; o--)
                null == i[o] && (delete r[e[o]],
                e.pop())
        }
        function n(t) {
            return {
                applyVisual: function(e, i, n) {
                    var r = i("color")
                      , a = h[be](e);
                    if (e = a ? [this.mapValueToVisual(e[0]), this.mapValueToVisual(e[1])] : this.mapValueToVisual(e),
                    h[be](r))
                        for (var o = 0, s = r[Ve]; s > o; o++)
                            r[o].color = t(r[o].color, a ? e[o] : e);
                    else
                        n("color", t(r, e))
                },
                mapValueToVisual: function(t) {
                    var e = this._normalizeData(t)
                      , i = this._getSpecifiedVisual(t)
                      , n = this[Ke].visual;
                    return null == i && (i = c(this) ? s(this, n, e) : f(e, [0, 1], n, !0)),
                    i
                }
            }
        }
        function r(t, e) {
            return t[Math.round(f(e, [0, 1], [0, t[Ve] - 1], !0))]
        }
        function a(t, e, i) {
            i("color", this.mapValueToVisual(t))
        }
        function s(t, e, i) {
            return e[t[Ke].loop && i !== v ? i % e[Ve] : i]
        }
        function c(t) {
            return t[Ke].mappingMethod === x
        }
        var h = t(si)
          , d = t("zrender/tool/color")
          , f = t(ee)[C]
          , p = h.each
          , m = h[Ge]
          , v = -1
          , g = function(t) {
            var n = t.mappingMethod
              , r = t.type;
            this.type = r,
            this.mappingMethod = n;
            var a = this[Ke] = h.clone(t);
            this._normalizeData = _[n],
            this._getSpecifiedVisual = h.bind(b[n], this, r),
            h[Ze](this, y[r]),
            "piecewise" === n && e(a),
            n === x && i(a)
        };
        g[ii] = {
            constructor: g,
            applyVisual: null,
            isValueActive: null,
            mapValueToVisual: null,
            getNormalizer: function() {
                return h.bind(this._normalizeData, this)
            }
        };
        var y = g.visualHandlers = {
            color: {
                applyVisual: a,
                getColorMapper: function() {
                    var t = c(this) ? this[Ke].visual : h.map(this[Ke].visual, d.parse);
                    return h.bind(c(this) ? function(e, i) {
                        return !i && (e = this._normalizeData(e)),
                        s(this, t, e)
                    }
                    : function(e, i, n) {
                        var r = !!n;
                        return !i && (e = this._normalizeData(e)),
                        n = d.fastMapToColor(e, t, n),
                        r ? n : h.stringify(n, "rgba")
                    }
                    , this)
                },
                mapValueToVisual: function(t) {
                    var e = this[Ke].visual;
                    if (h[be](t))
                        return t = [this._normalizeData(t[0]), this._normalizeData(t[1])],
                        d.mapIntervalToColor(t, e);
                    var i = this._normalizeData(t)
                      , n = this._getSpecifiedVisual(t);
                    return null == n && (n = c(this) ? s(this, e, i) : d.mapToColor(i, e)),
                    n
                }
            },
            colorHue: n(function(t, e) {
                return d.modifyHSL(t, e)
            }),
            colorSaturation: n(function(t, e) {
                return d.modifyHSL(t, null, e)
            }),
            colorLightness: n(function(t, e) {
                return d.modifyHSL(t, null, null, e)
            }),
            colorAlpha: n(function(t, e) {
                return d.modifyAlpha(t, e)
            }),
            symbol: {
                applyVisual: function(t, e, i) {
                    var n = this.mapValueToVisual(t);
                    if (h[me](n))
                        i(u, n);
                    else if (m(n))
                        for (var r in n)
                            n.hasOwnProperty(r) && i(r, n[r])
                },
                mapValueToVisual: function(t) {
                    var e = this._normalizeData(t)
                      , i = this._getSpecifiedVisual(t)
                      , n = this[Ke].visual;
                    return null == i && (i = c(this) ? s(this, n, e) : r(n, e) || {}),
                    i
                }
            },
            symbolSize: {
                applyVisual: function(t, e, i) {
                    i(l, this.mapValueToVisual(t))
                },
                mapValueToVisual: function(t) {
                    var e = this._normalizeData(t)
                      , i = this._getSpecifiedVisual(t)
                      , n = this[Ke].visual;
                    return null == i && (i = c(this) ? s(this, n, e) : f(e, [0, 1], n, !0)),
                    i
                }
            }
        }
          , _ = {
            linear: function(t) {
                return f(t, this[Ke].dataExtent, [0, 1], !0)
            },
            piecewise: function(t) {
                var e = this[Ke].pieceList
                  , i = g.findPieceIndex(t, e);
                return null != i ? f(i, [0, e[Ve] - 1], [0, 1], !0) : void 0
            },
            category: function(t) {
                var e = this[Ke].categories ? this[Ke].categoryMap[t] : t;
                return null == e ? v : e
            }
        }
          , b = {
            linear: h.noop,
            piecewise: function(t, e) {
                var i = this[Ke]
                  , n = i.pieceList;
                if (i.hasSpecialVisual) {
                    var r = g.findPieceIndex(e, n)
                      , a = n[r];
                    if (a && a.visual)
                        return a.visual[t]
                }
            },
            category: h.noop
        };
        return g.addVisualHandler = function(t, e) {
            y[t] = e
        }
        ,
        g.isValidType = function(t) {
            return y.hasOwnProperty(t)
        }
        ,
        g.eachVisual = function(t, e, i) {
            h[Ge](t) ? h.each(t, e, i) : e.call(i, t)
        }
        ,
        g.mapVisual = function(t, e, i) {
            var n, r = h[be](t) ? [] : h[Ge](t) ? {} : (n = !0,
            null);
            return g.eachVisual(t, function(t, a) {
                var o = e.call(i, t, a);
                n ? r = o : r[a] = o
            }),
            r
        }
        ,
        g.isInVisualCluster = function(t, e) {
            return "color" === e ? !(!t || 0 !== t[_e](e)) : t === e
        }
        ,
        g.retrieveVisuals = function(t) {
            var e, i = {};
            return t && p(y, function(n, r) {
                t.hasOwnProperty(r) && (i[r] = t[r],
                e = !0)
            }),
            e ? i : null
        }
        ,
        g.prepareVisualTypes = function(t) {
            if (m(t)) {
                var e = [];
                p(t, function(t, i) {
                    e.push(i)
                }),
                t = e
            } else {
                if (!h[be](t))
                    return [];
                t = t.slice()
            }
            return t.sort(function(t, e) {
                return "color" === e && "color" !== t && 0 === t[_e]("color") ? 1 : -1
            }),
            t
        }
        ,
        g.findPieceIndex = function(t, e) {
            for (var i = 0, n = e[Ve]; n > i; i++) {
                var r = e[i];
                if (null != r.value && r.value === t)
                    return i
            }
            for (var i = 0, n = e[Ve]; n > i; i++) {
                var r = e[i]
                  , a = r[o];
                if (a)
                    if (a[0] === -1 / 0) {
                        if (t < a[1])
                            return i
                    } else if (1 / 0 === a[1]) {
                        if (a[0] < t)
                            return i
                    } else if (r[o][0] <= t && t <= r[o][1])
                        return i
            }
        }
        ,
        g
    }),
    e("echarts/component/dataZoom/history", [li, si], function(t) {
        function e(t) {
            var e = t[r];
            return e || (e = t[r] = [{}]),
            e
        }
        var i = t(si)
          , n = i.each
          , r = "\x00_ec_hist_store"
          , a = {
            push: function(t, i) {
                var r = e(t);
                n(i, function(e, i) {
                    for (var n = r[Ve] - 1; n >= 0; n--) {
                        var a = r[n];
                        if (a[i])
                            break
                    }
                    if (0 > n) {
                        var o = t.queryComponents({
                            mainType: "dataZoom",
                            subType: "select",
                            id: i
                        })[0];
                        if (o) {
                            var s = o.getPercentRange();
                            r[0][i] = {
                                dataZoomId: i,
                                start: s[0],
                                end: s[1]
                            }
                        }
                    }
                }),
                r.push(i)
            },
            pop: function(t) {
                var i = e(t)
                  , r = i[i[Ve] - 1];
                i[Ve] > 1 && i.pop();
                var a = {};
                return n(r, function(t, e) {
                    for (var n = i[Ve] - 1; n >= 0; n--) {
                        var t = i[n][e];
                        if (t) {
                            a[e] = t;
                            break
                        }
                    }
                }),
                a
            },
            clear: function(t) {
                t[r] = null
            },
            count: function(t) {
                return e(t)[Ve]
            }
        };
        return a
    }),
    e("echarts/component/helper/SelectController", [li, "zrender/mixin/Eventful", si, v], function(t) {
        function e(t, e, i) {
            g.call(this),
            this.type = t,
            this.zr = e,
            this.opt = y.clone(i),
            this.group = new x.Group,
            this._containerRect = null,
            this._track = [],
            this._dragging,
            this._cover,
            this._disabled = !0,
            this._handlers = {
                mousedown: _(o, this),
                mousemove: _(s, this),
                mouseup: _(l, this)
            },
            b(A, function(t) {
                this.zr.on(t, this._handlers[t])
            }, this)
        }
        function i(t) {
            t[Me](function(t) {
                t.z = C
            })
        }
        function r(t, e) {
            var i = this.group.transformCoordToLocal(t, e);
            return !this._containerRect || this._containerRect[te](i[0], i[1])
        }
        function a(t) {
            var e = t.event;
            e.preventDefault && e.preventDefault()
        }
        function o(t) {
            if (!(this._disabled || t[ze] && t[ze].draggable)) {
                a(t);
                var e = t.offsetX
                  , i = t.offsetY;
                r.call(this, e, i) && (this._dragging = !0,
                this._track = [[e, i]])
            }
        }
        function s(t) {
            this._dragging && !this._disabled && (a(t),
            u.call(this, t))
        }
        function l(t) {
            this._dragging && !this._disabled && (a(t),
            u.call(this, t, !0),
            this._dragging = !1,
            this._track = [])
        }
        function u(t, e) {
            var i = t.offsetX
              , n = t.offsetY;
            if (r.call(this, i, n)) {
                this._track.push([i, n]);
                var a = c.call(this) ? L[this.type].getRanges.call(this) : [];
                h.call(this, a),
                this[Re]("selected", y.clone(a)),
                e && this[Re]("selectEnd", y.clone(a))
            }
        }
        function c() {
            var t = this._track;
            if (!t[Ve])
                return !1;
            var e = t[t[Ve] - 1]
              , i = t[0]
              , n = e[0] - i[0]
              , r = e[1] - i[1]
              , a = S(n * n + r * r, .5);
            return a > T
        }
        function h(t) {
            var e = L[this.type];
            t && t[Ve] ? (this._cover || (this._cover = e[J].call(this),
            this.group.add(this._cover)),
            e[Fe].call(this, t)) : (this.group[Ne](this._cover),
            this._cover = null),
            i(this.group)
        }
        function d() {
            var t = this.group
              , e = t[R];
            e && e[Ne](t)
        }
        function f() {
            var t = this.opt;
            return new x.Rect({
                style: {
                    stroke: t[N],
                    fill: t.fill,
                    lineWidth: t[G],
                    opacity: t[ie]
                }
            })
        }
        function p() {
            return y.map(this._track, function(t) {
                return this.group.transformCoordToLocal(t[0], t[1])
            }, this)
        }
        function m() {
            var t = p.call(this)
              , e = t[Ve] - 1;
            return 0 > e && (e = 0),
            [t[0], t[e]]
        }
        var g = t("zrender/mixin/Eventful")
          , y = t(si)
          , x = t(v)
          , _ = y.bind
          , b = y.each
          , w = Math.min
          , M = Math.max
          , S = Math.pow
          , C = 1e4
          , T = 2
          , A = ["mousedown", n, "mouseup"];
        e[ii] = {
            constructor: e,
            enable: function(t, e) {
                this._disabled = !1,
                d.call(this),
                this._containerRect = e !== !1 ? e || t[se]() : null,
                t.add(this.group)
            },
            update: function(t) {
                h.call(this, t && y.clone(t))
            },
            disable: function() {
                this._disabled = !0,
                d.call(this)
            },
            dispose: function() {
                this.disable(),
                b(A, function(t) {
                    this.zr.off(t, this._handlers[t])
                }, this)
            }
        },
        y.mixin(e, g);
        var L = {
            line: {
                create: f,
                getRanges: function() {
                    var t = m.call(this)
                      , e = w(t[0][0], t[1][0])
                      , i = M(t[0][0], t[1][0]);
                    return [[e, i]]
                },
                update: function(t) {
                    var e = t[0]
                      , i = this.opt.width;
                    this._cover[z]({
                        x: e[0],
                        y: -i / 2,
                        width: e[1] - e[0],
                        height: i
                    })
                }
            },
            rect: {
                create: f,
                getRanges: function() {
                    var t = m.call(this)
                      , e = [w(t[1][0], t[0][0]), w(t[1][1], t[0][1])]
                      , i = [M(t[1][0], t[0][0]), M(t[1][1], t[0][1])];
                    return [[[e[0], i[0]], [e[1], i[1]]]]
                },
                update: function(t) {
                    var e = t[0];
                    this._cover[z]({
                        x: e[0][0],
                        y: e[1][0],
                        width: e[0][1] - e[0][0],
                        height: e[1][1] - e[1][0]
                    })
                }
            }
        };
        return e
    }),
    e("echarts/component/dataZoomSelect", [li, "./dataZoom/typeDefaulter", "./dataZoom/DataZoomModel", "./dataZoom/DataZoomView", "./dataZoom/SelectZoomModel", "./dataZoom/SelectZoomView", "./dataZoom/dataZoomProcessor", "./dataZoom/dataZoomAction"], function(t) {
        t("./dataZoom/typeDefaulter"),
        t("./dataZoom/DataZoomModel"),
        t("./dataZoom/DataZoomView"),
        t("./dataZoom/SelectZoomModel"),
        t("./dataZoom/SelectZoomView"),
        t("./dataZoom/dataZoomProcessor"),
        t("./dataZoom/dataZoomAction")
    }),
    e("echarts/component/helper/interactionMutex", [li], function() {
        function t(t) {
            return t[e] || (t[e] = {})
        }
        var e = "\x00_ec_interaction_mutex"
          , i = {
            take: function(e, i) {
                t(i)[e] = !0
            },
            release: function(e, i) {
                t(i)[e] = !1
            },
            isTaken: function(e, i) {
                return !!t(i)[e]
            }
        };
        return i
    }),
    e("zrender/core/arrayDiff", [li], function() {
        function t(t, e) {
            return t === e
        }
        function e(t, e, i) {
            var n = {
                cmd: t,
                idx: e
            };
            return "=" === t && (n.idx1 = i),
            n
        }
        function i(t, i, n, r) {
            t.push(e(i, n, r))
        }
        function n(t, e, i, n, r, a, s, l) {
            var u, c, h, d = i > n, f = r > a, p = o(n - i), m = o(a - r);
            for (c = 0; p >= c; c++)
                for (h = 0; m >= h; h++)
                    if (0 === c)
                        l[h] = h;
                    else if (0 === h)
                        u = l[h],
                        l[h] = c;
                    else {
                        var v = t[d ? i - c : c - 1 + i]
                          , g = e[f ? r - h : h - 1 + r]
                          , y = u + (s(v, g) ? 0 : 2)
                          , x = l[h] + 1
                          , _ = l[h - 1] + 1;
                        u = l[h],
                        l[h] = x > y ? y : x,
                        _ < l[h] && (l[h] = _)
                    }
            return l
        }
        function r(t, e, a, o, s, l, u, c, h) {
            var d, f, p = [], m = o - a, v = l - s;
            if (m)
                if (v)
                    if (1 === m) {
                        var g = t[a]
                          , y = !1;
                        for (f = 0; v > f; f++)
                            u(g, e[f + s]) && !y ? (y = !0,
                            i(p, "=", a, f + s)) : i(p, "+", f + s);
                        y || i(p, "-", a)
                    } else if (1 === v) {
                        var x = e[s]
                          , y = !1;
                        for (d = 0; m > d; d++)
                            u(x, t[d + a]) && !y ? (y = !0,
                            i(p, "=", d + a, s)) : i(p, "-", d + a);
                        y || i(p, "+", s)
                    } else {
                        var _ = (m / 2 | 0) + a;
                        n(t, e, a, _, s, l, u, c),
                        n(t, e, o, _ + 1, l, s, u, h);
                        var b, w = 1 / 0, M = 0;
                        for (f = 0; v >= f; f++)
                            b = c[f] + h[v - f],
                            w > b && (w = b,
                            M = f);
                        M += s,
                        p = r(t, e, a, _, s, M, u, c, h);
                        var S = r(t, e, _, o, M, l, u, c, h);
                        for (d = 0; d < S[Ve]; d++)
                            p.push(S[d])
                    }
                else
                    for (d = 0; m > d; d++)
                        i(p, "-", d + a);
            else
                for (f = 0; v > f; f++)
                    i(p, "+", f + s);
            return p
        }
        function a(e, n, a) {
            a = a || t;
            var o, s, l = e[Ve], u = n[Ve], c = Math.min(l, u), h = [];
            for (o = 0; c > o && a(e[o], n[o]); o++)
                i(h, "=", o, o);
            for (s = 0; c > s && a(e[l - s - 1], n[u - s - 1]); s++)
                ;
            if (l - s >= o || u - s >= o) {
                var d = r(e, n, o, l - s, o, u - s, a, [], []);
                for (o = 0; o < d[Ve]; o++)
                    h.push(d[o]);
                for (o = 0; s > o; o++)
                    i(h, "=", l - s + o, u - s + o)
            }
            return h
        }
        var o = Math.abs;
        return a
    }),
    e("echarts/chart/helper/Line", [li, "../../util/symbol", oi, "./LinePath", v, si, r], function(t) {
        function e(t, e, i) {
            var n = e[p](i, "color")
              , r = e[p](i, u)
              , a = e[p](i, l);
            if ("none" !== r) {
                y[be](a) || (a = [a, a]);
                var o = d.createSymbol(r, -a[0] / 2, -a[1] / 2, a[0], a[1], n);
                return o.name = t,
                o
            }
        }
        function i(t) {
            var e = new m({
                name: "line",
                style: {
                    strokeNoScale: !0
                }
            });
            return n(e.shape, t),
            e
        }
        function n(t, e) {
            var i = e[0]
              , n = e[1]
              , r = e[2];
            t.x1 = i[0],
            t.y1 = i[1],
            t.x2 = n[0],
            t.y2 = n[1],
            t.percent = 1,
            r && (t.cpx1 = r[0],
            t.cpy1 = r[1])
        }
        function a(t) {
            return t.type === u && "arrow" === t.shape.symbolType
        }
        function o() {
            var t = this
              , e = t.childOfName("line");
            if (this.__dirty || e.__dirty) {
                var i = t.childOfName("fromSymbol")
                  , n = t.childOfName("toSymbol")
                  , r = t.childOfName("label")
                  , o = e.pointAt(0)
                  , l = e.pointAt(e.shape.percent)
                  , u = f.sub([], l, o);
                f.normalize(u, u),
                i && (i.attr(re, o),
                a(n) && n.attr("rotation", s(o, l))),
                n && (n.attr(re, l),
                a(i) && i.attr("rotation", s(l, o))),
                r.attr(re, l);
                var c, h, d;
                "end" === r.__position ? (c = [5 * u[0] + l[0], 5 * u[1] + l[1]],
                h = u[0] > .8 ? "left" : u[0] < -.8 ? "right" : ae,
                d = u[1] > .8 ? "top" : u[1] < -.8 ? We : M) : (c = [5 * -u[0] + o[0], 5 * -u[1] + o[1]],
                h = u[0] > .8 ? "right" : u[0] < -.8 ? "left" : ae,
                d = u[1] > .8 ? We : u[1] < -.8 ? "top" : M),
                r.attr({
                    style: {
                        textBaseline: r.__textBaseline || d,
                        textAlign: r.__textAlign || h
                    },
                    position: c
                })
            }
        }
        function s(t, e) {
            return -Math.PI / 2 - Math.atan2(e[1] - t[1], e[0] - t[0])
        }
        function h(t, e, i, n) {
            g.Group.call(this),
            this._createLine(t, e, i, n)
        }
        var d = t("../../util/symbol")
          , f = t(oi)
          , m = t("./LinePath")
          , g = t(v)
          , y = t(si)
          , x = t(r)
          , _ = h[ii];
        return _.beforeUpdate = o,
        _._createLine = function(t, n, r, a) {
            var o = t[Ae]
              , s = t.getItemLayout(a)
              , l = i(s);
            l.shape.percent = 0,
            g.initProps(l, {
                shape: {
                    percent: 1
                }
            }, o),
            this.add(l);
            var c = new g.Text({
                name: "label"
            });
            if (this.add(c),
            n) {
                var h = e("fromSymbol", n, a);
                this.add(h),
                this._fromSymbolType = n[p](a, u)
            }
            if (r) {
                var d = e("toSymbol", r, a);
                this.add(d),
                this._toSymbolType = r[p](a, u)
            }
            this._updateCommonStl(t, n, r, a)
        }
        ,
        _[c] = function(t, i, r, a) {
            var o = t[Ae]
              , s = this.childOfName("line")
              , l = t.getItemLayout(a)
              , c = {
                shape: {}
            };
            if (n(c.shape, l),
            g.updateProps(s, c, o),
            i) {
                var h = i[p](a, u);
                if (this._fromSymbolType !== h) {
                    var d = e("fromSymbol", i, a);
                    this[Ne](s.childOfName("fromSymbol")),
                    this.add(d)
                }
                this._fromSymbolType = h
            }
            if (r) {
                var f = r[p](a, u);
                if (f !== this._toSymbolType) {
                    var m = e("toSymbol", r, a);
                    this[Ne](s.childOfName("toSymbol")),
                    this.add(m)
                }
                this._toSymbolType = f
            }
            this._updateCommonStl(t, i, r, a)
        }
        ,
        _._updateCommonStl = function(t, e, i, n) {
            var r = t[Ae]
              , a = this.childOfName("line")
              , o = t[T](n)
              , s = o[Qe]("label.normal")
              , l = s[Qe](he)
              , u = o[Qe]("label.emphasis")
              , c = u[Qe](he)
              , h = x.round(r[X](n));
            isNaN(h) && (h = t[j](n)),
            a[ne](y[Ze]({
                stroke: t[p](n, "color")
            }, o[Qe]("lineStyle.normal").getLineStyle()));
            var d = this.childOfName("label");
            d[ne]({
                text: s.get("show") ? r.getFormattedLabel(n, B) || h : "",
                textFont: l[ue](),
                fill: l[le]() || t[p](n, "color")
            }),
            d.hoverStyle = {
                text: u.get("show") ? r.getFormattedLabel(n, E) || h : "",
                textFont: l[ue](),
                fill: c[le]()
            },
            d.__textAlign = l.get("align"),
            d.__textBaseline = l.get("baseline"),
            d.__position = s.get(re),
            g[Z](this, o[Qe]("lineStyle.emphasis").getLineStyle())
        }
        ,
        _.updateLayout = function(t, e, i, r) {
            var a = t.getItemLayout(r)
              , o = this.childOfName("line");
            n(o.shape, a),
            o.dirty(!0),
            e && e[O](r).attr(re, a[0]),
            i && i[O](r).attr(re, a[1])
        }
        ,
        y[ve](h, g.Group),
        h
    }),
    e("echarts/component/helper/RoamController", [li, "zrender/mixin/Eventful", si, "zrender/core/event", "./interactionMutex"], function(t) {
        function e(t) {
            if (!t[ze] || !t[ze].draggable) {
                var e = t.offsetX
                  , i = t.offsetY
                  , n = this.rect;
                n && n[te](e, i) && (this._x = e,
                this._y = i,
                this._dragging = !0)
            }
        }
        function i(t) {
            if (this._dragging && (h.stop(t.event),
            "pinch" !== t.gestureEvent)) {
                if (d.isTaken("globalPan", this._zr))
                    return;
                var e = t.offsetX
                  , i = t.offsetY
                  , n = e - this._x
                  , r = i - this._y;
                this._x = e,
                this._y = i;
                var a = this[ze];
                if (a) {
                    var o = a[re];
                    o[0] += n,
                    o[1] += r,
                    a.dirty()
                }
                h.stop(t.event),
                this[Re]("pan", n, r)
            }
        }
        function r() {
            this._dragging = !1
        }
        function a(t) {
            h.stop(t.event);
            var e = t.wheelDelta > 0 ? 1.1 : 1 / 1.1;
            s.call(this, t, e, t.offsetX, t.offsetY)
        }
        function o(t) {
            if (!d.isTaken("globalPan", this._zr)) {
                h.stop(t.event);
                var e = t.pinchScale > 1 ? 1.1 : 1 / 1.1;
                s.call(this, t, e, t.pinchX, t.pinchY)
            }
        }
        function s(t, e, i, n) {
            var r = this.rect;
            if (r && r[te](i, n)) {
                var a = this[ze];
                if (a) {
                    var o = a[re]
                      , s = a.scale
                      , l = this._zoom = this._zoom || 1;
                    l *= e;
                    var u = l / this._zoom;
                    this._zoom = l,
                    o[0] -= (i - o[0]) * (u - 1),
                    o[1] -= (n - o[1]) * (u - 1),
                    s[0] *= u,
                    s[1] *= u,
                    a.dirty()
                }
                this[Re]("zoom", e, i, n)
            }
        }
        function l(t, s, l) {
            this[ze] = s,
            this.rect = l,
            this._zr = t;
            var h = c.bind
              , d = h(e, this)
              , f = h(i, this)
              , p = h(r, this)
              , m = h(a, this)
              , v = h(o, this);
            u.call(this),
            this.enable = function(e) {
                this.disable(),
                null == e && (e = !0),
                (e === !0 || "move" === e || "pan" === e) && (t.on("mousedown", d),
                t.on(n, f),
                t.on("mouseup", p)),
                (e === !0 || "scale" === e || "zoom" === e) && (t.on("mousewheel", m),
                t.on("pinch", v))
            }
            ,
            this.disable = function() {
                t.off("mousedown", d),
                t.off(n, f),
                t.off("mouseup", p),
                t.off("mousewheel", m),
                t.off("pinch", v)
            }
            ,
            this[De] = this.disable,
            this.isDragging = function() {
                return this._dragging
            }
            ,
            this.isPinching = function() {
                return this._pinching
            }
        }
        var u = t("zrender/mixin/Eventful")
          , c = t(si)
          , h = t("zrender/core/event")
          , d = t("./interactionMutex");
        return c.mixin(l, u),
        l
    }),
    e("echarts/component/dataZoom/SelectZoomView", [li, "./DataZoomView"], function(t) {
        return t("./DataZoomView")[Ze]({
            type: "dataZoom.select"
        })
    }),
    e("echarts/component/dataZoom/SelectZoomModel", [li, "./DataZoomModel"], function(t) {
        var e = t("./DataZoomModel");
        return e[Ze]({
            type: "dataZoom.select"
        })
    }),
    e("echarts/chart/helper/LinePath", [li, v], function(t) {
        var e = t(v)
          , n = e.Line[ii]
          , r = e.BezierCurve[ii];
        return e.extendShape({
            type: "ec-line",
            style: {
                stroke: "#000",
                fill: null
            },
            shape: {
                x1: 0,
                y1: 0,
                x2: 0,
                y2: 0,
                percent: 1,
                cpx1: null,
                cpy1: null
            },
            buildPath: function(t, e) {
                (null == e.cpx1 || null == e.cpy1 ? n : r)[i](t, e)
            },
            pointAt: function(t) {
                var e = this.shape;
                return null == e.cpx1 || null == e.cpy1 ? n.pointAt.call(this, t) : r.pointAt.call(this, t)
            }
        })
    }),
    e("echarts/component/visualMap/VisualMapModel", [li, si, "zrender/core/env", m, "../../util/model", "../../visual/visualDefault", "../../visual/VisualMapping", r], function(t) {
        var e = t(si)
          , i = t("zrender/core/env")
          , n = t(m)
          , a = t("../../util/model")
          , o = t("../../visual/visualDefault")
          , s = t("../../visual/VisualMapping")
          , c = s.mapVisual
          , h = s.eachVisual
          , d = t(r)
          , f = e[be]
          , p = e.each
          , v = d.asc
          , g = d[C];
        return n.extendComponentModel({
            type: "visualMap",
            dependencies: [Ie],
            dataBound: [-1 / 0, 1 / 0],
            stateList: ["inRange", "outOfRange"],
            layoutMode: {
                type: "box",
                ignoreSize: !0
            },
            defaultOption: {
                show: !0,
                zlevel: 0,
                z: 4,
                min: 0,
                max: 200,
                dimension: null,
                inRange: null,
                outOfRange: null,
                left: 0,
                right: null,
                top: null,
                bottom: 0,
                itemWidth: null,
                itemHeight: null,
                inverse: !1,
                orient: "vertical",
                seriesIndex: null,
                backgroundColor: "rgba(0,0,0,0)",
                borderColor: "#ccc",
                contentColor: "#5793f3",
                inactiveColor: "#aaa",
                borderWidth: 0,
                padding: 5,
                textGap: 10,
                precision: 0,
                color: ["#bf444c", "#d88273", "#f6efa6"],
                formatter: null,
                text: null,
                textStyle: {
                    color: "#333"
                }
            },
            init: function(t, e, i) {
                this._autoSeriesIndex = !1,
                this._dataExtent,
                this.controllerVisuals = {},
                this.targetVisuals = {},
                this.textStyleModel,
                this.itemSize,
                this.mergeDefaultAndTheme(t, i),
                this.doMergeOption({}, !0)
            },
            mergeOption: function(t) {
                this.$superApply("mergeOption", arguments),
                this.doMergeOption(t, !1)
            },
            doMergeOption: function() {
                var t = this[Ke];
                i[Ue] || (t.realtime = !1),
                this.textStyleModel = this[Qe](he),
                this.resetItemSize(),
                this.completeVisualOption()
            },
            formatValueText: function(t, i) {
                function n(t) {
                    return t === l[0] ? "min" : t === l[1] ? "max" : (+t)[w](s)
                }
                var r, a, o = this[Ke], s = o.precision, l = this.dataBound, u = o.formatter;
                return e[be](t) && (t = t.slice(),
                r = !0),
                a = i ? t : r ? [n(t[0]), n(t[1])] : n(t),
                e[me](u) ? u[we]("{value}", r ? a[0] : a)[we]("{value2}", r ? a[1] : a) : e.isFunction(u) ? r ? u(t[0], t[1]) : u(t) : r ? t[0] === l[0] ? "< " + a[1] : t[1] === l[1] ? "> " + a[0] : a[0] + " - " + a[1] : a
            },
            resetTargetSeries: function(t, e) {
                var i = this[Ke]
                  , n = this._autoSeriesIndex = null == (e ? i : t)[Te];
                i[Te] = n ? [] : a.normalizeToArray(i[Te]),
                n && this[q][Oe](function(t, e) {
                    var n = t[Pe]();
                    "list" === n.type && i[Te].push(e)
                })
            },
            resetExtent: function() {
                var t = this[Ke]
                  , e = v([t.min, t.max]);
                this._dataExtent = e
            },
            getDataDimension: function(t) {
                var e = this[Ke].dimension;
                return null != e ? e : t[U][Ve] - 1
            },
            getExtent: function() {
                return this._dataExtent.slice()
            },
            resetVisual: function(t) {
                function e(e, n) {
                    p(this.stateList, function(r) {
                        var a = n[r] || (n[r] = {})
                          , o = this[Ke][e][r] || {};
                        p(o, function(e, n) {
                            if (s.isValidType(n)) {
                                var o = {
                                    type: n,
                                    dataExtent: i,
                                    visual: e
                                };
                                t && t.call(this, o, r),
                                a[n] = new s(o)
                            }
                        }, this)
                    }, this)
                }
                var i = this[$]();
                e.call(this, "controller", this.controllerVisuals),
                e.call(this, ze, this.targetVisuals)
            },
            completeVisualOption: function() {
                function t(t) {
                    f(r.color) && !t.inRange && (t.inRange = {
                        color: r.color.slice().reverse()
                    }),
                    p(this.stateList, function(i) {
                        var n = t[i];
                        if (e[me](n)) {
                            var r = o.get(n, "active", v);
                            r ? (t[i] = {},
                            t[i][n] = r) : delete t[i]
                        }
                    }, this)
                }
                function i(t, e, i) {
                    var n = t[e]
                      , r = t[i];
                    n && !r && (r = t[i] = {},
                    p(n, function(t, e) {
                        var i = o.get(e, "inactive", v);
                        s.isValidType(e) && i && (r[e] = i)
                    }))
                }
                function n(t) {
                    var i = (t.inRange || {})[u] || (t.outOfRange || {})[u]
                      , n = (t.inRange || {})[l] || (t.outOfRange || {})[l]
                      , r = this.get("inactiveColor");
                    p(this.stateList, function(a) {
                        var o = this.itemSize
                          , s = t[a];
                        s || (s = t[a] = {
                            color: v ? r : [r]
                        }),
                        s[u] || (s[u] = i && e.clone(i) || (v ? "roundRect" : ["roundRect"])),
                        s[l] || (s[l] = n && e.clone(n) || (v ? o[0] : [o[0], o[0]])),
                        s[u] = c(s[u], function(t) {
                            return "none" === t || "square" === t ? "roundRect" : t
                        });
                        var d = s[l];
                        if (d) {
                            var f = -1 / 0;
                            h(d, function(t) {
                                t > f && (f = t)
                            }),
                            s[l] = c(d, function(t) {
                                return g(t, [0, f], [0, o[0]], !0)
                            })
                        }
                    }, this)
                }
                var r = this[Ke]
                  , a = {
                    inRange: r.inRange,
                    outOfRange: r.outOfRange
                }
                  , d = r[ze] || (r[ze] = {})
                  , m = r.controller || (r.controller = {});
                e.merge(d, a),
                e.merge(m, a);
                var v = this.isCategory();
                t.call(this, d),
                t.call(this, m),
                i.call(this, d, "inRange", "outOfRange"),
                i.call(this, d, "outOfRange", "inRange"),
                n.call(this, m)
            },
            eachTargetSeries: function(t, i) {
                e.each(this[Ke][Te], function(e) {
                    t.call(i, this[q].getSeriesByIndex(e))
                }, this)
            },
            isCategory: function() {
                return !!this[Ke].categories
            },
            resetItemSize: function() {
                this.itemSize = [parseFloat(this.get("itemWidth")), parseFloat(this.get("itemHeight"))]
            },
            setSelected: e.noop,
            getValueState: e.noop
        })
    }),
    e("echarts/visual/visualDefault", [li, si], function(t) {
        var e = t(si)
          , i = {
            get: function(t, i, r) {
                var a = e.clone((n[t] || {})[i]);
                return r && e[be](a) ? a[a[Ve] - 1] : a
            }
        }
          , n = {
            color: {
                active: ["#006edd", "#e0ffff"],
                inactive: ["rgba(0,0,0,0)"]
            },
            colorHue: {
                active: [0, 360],
                inactive: [0, 0]
            },
            colorSaturation: {
                active: [.3, 1],
                inactive: [0, 0]
            },
            colorLightness: {
                active: [.9, .5],
                inactive: [0, 0]
            },
            colorAlpha: {
                active: [.3, 1],
                inactive: [0, 0]
            },
            symbol: {
                active: ["circle", "roundRect", "diamond"],
                inactive: ["none"]
            },
            symbolSize: {
                active: [10, 50],
                inactive: [0, 0]
            }
        };
        return i
    }),
    e("echarts/component/visualMap/VisualMapView", [li, m, si, v, "../../util/format", "../../util/layout", "../../visual/VisualMapping"], function(t) {
        var e = t(m)
          , i = t(si)
          , n = t(v)
          , r = t("../../util/format")
          , a = t("../../util/layout")
          , o = t("../../visual/VisualMapping");
        return e[ye]({
            type: "visualMap",
            autoPositionValues: {
                left: 1,
                right: 1,
                top: 1,
                bottom: 1
            },
            init: function(t, e) {
                this[q] = t,
                this.api = e,
                this.visualMapModel,
                this._updatableShapes = {}
            },
            render: function(t) {
                return this.visualMapModel = t,
                t.get("show") === !1 ? void this.group[pe]() : void this.doRender.apply(this, arguments)
            },
            renderBackground: function(t) {
                var e = this.visualMapModel
                  , i = r.normalizeCssArray(e.get("padding") || 0)
                  , a = t[se]();
                t.add(new n.Rect({
                    z2: -1,
                    silent: !0,
                    shape: {
                        x: a.x - i[3],
                        y: a.y - i[0],
                        width: a.width + i[3] + i[1],
                        height: a[He] + i[0] + i[2]
                    },
                    style: {
                        fill: e.get(Xe),
                        stroke: e.get("borderColor"),
                        lineWidth: e.get("borderWidth")
                    }
                }))
            },
            getControllerVisual: function(t, e, n) {
                function r(t) {
                    return h[t]
                }
                function a(t, e) {
                    h[t] = e
                }
                var s = this.visualMapModel
                  , l = i[be](t);
                if (l && (!e || "color" !== n))
                    throw new Error(t);
                var u = s.controllerVisuals[e || s.getValueState(t)]
                  , c = s.get("contentColor")
                  , h = {
                    symbol: s.get("itemSymbol"),
                    color: l ? [{
                        color: c,
                        offset: 0
                    }, {
                        color: c,
                        offset: 1
                    }] : c
                }
                  , d = o.prepareVisualTypes(u);
                return i.each(d, function(e) {
                    var i = u[e];
                    (!n || o.isInVisualCluster(e, n)) && i && i.applyVisual(t, r, a)
                }),
                h
            },
            positionGroup: function(t) {
                var e = this.visualMapModel
                  , i = this.api;
                a.positionGroup(t, e.getBoxLayoutParams(), {
                    width: i[$e](),
                    height: i[Ye]()
                })
            },
            doRender: i.noop
        })
    }),
    e("echarts/component/visualMap/helper", [li, "../../util/layout"], function(t) {
        var e = t("../../util/layout")
          , i = {
            getItemAlign: function(t, i, n) {
                var r = t[Ke]
                  , o = r.align;
                if (null != o && "auto" !== o)
                    return o;
                for (var l = {
                    width: i[$e](),
                    height: i[Ye]()
                }, u = r[a] === s ? 1 : 0, c = [["left", "right", "width"], ["top", We, He]], h = c[u], d = [0, null, 10], f = {}, p = 0; 3 > p; p++)
                    f[c[1 - u][p]] = d[p],
                    f[h[p]] = 2 === p ? n[0] : r[h[p]];
                var m = [["x", "width", 3], ["y", He, 0]][u]
                  , v = e[oe](f, l, r.padding);
                return h[(v.margin[m[2]] || 0) + v[m[0]] + .5 * v[m[1]] < .5 * l[m[1]] ? 0 : 1]
            }
        };
        return i
    }),
    e("echarts/component/visualMap/PiecewiseModel", [li, "./VisualMapModel", si, "../../visual/VisualMapping"], function(t) {
        function e(t, e) {
            var i = t[b];
            ("vertical" === t[a] ? !i : i) && e.reverse()
        }
        var i = t("./VisualMapModel")
          , n = t(si)
          , r = t("../../visual/VisualMapping")
          , s = i[Ze]({
            type: "visualMap.piecewise",
            defaultOption: {
                selected: null,
                align: "auto",
                itemWidth: 20,
                itemHeight: 14,
                itemSymbol: "roundRect",
                pieceList: null,
                categories: null,
                splitNumber: 5,
                selectedMode: "multiple",
                itemGap: 10
            },
            doMergeOption: function(t, e) {
                this.$superApply("doMergeOption", arguments),
                this._pieceList = [],
                this.resetTargetSeries(t, e),
                this.resetExtent();
                var i = this._mode = this._decideMode();
                l[this._mode].call(this),
                this._resetSelected(t, e);
                var r = this[Ke].categories;
                this.resetVisual(function(t, e) {
                    "categories" === i ? (t.mappingMethod = x,
                    t.categories = n.clone(r)) : (t.mappingMethod = "piecewise",
                    t.pieceList = n.map(this._pieceList, function(t) {
                        var t = n.clone(t);
                        return "inRange" !== e && (t.visual = null),
                        t
                    }))
                })
            },
            _resetSelected: function(t, e) {
                var i = this[Ke]
                  , r = this._pieceList
                  , a = (e ? i : t).selected || {};
                if (i.selected = a,
                n.each(r, function(t) {
                    var e = this.getSelectedMapKey(t);
                    e in a || (a[e] = !0)
                }, this),
                "single" === i.selectedMode) {
                    var o = !1;
                    n.each(r, function(t) {
                        var e = this.getSelectedMapKey(t);
                        a[e] && (o ? a[e] = !1 : o = !0)
                    }, this)
                }
            },
            getSelectedMapKey: function(t) {
                return "categories" === this._mode ? t.value + "" : t.index + ""
            },
            getPieceList: function() {
                return this._pieceList
            },
            _decideMode: function() {
                var t = this[Ke];
                return t.pieces && t.pieces[Ve] > 0 ? "pieces" : this[Ke].categories ? "categories" : "splitNumber"
            },
            setSelected: function(t) {
                this[Ke].selected = n.clone(t)
            },
            getValueState: function(t) {
                var e = this._pieceList
                  , i = r.findPieceIndex(t, e);
                return null != i && this[Ke].selected[this.getSelectedMapKey(e[i])] ? "inRange" : "outOfRange"
            }
        })
          , l = {
            splitNumber: function() {
                var t = this[Ke]
                  , e = t.precision
                  , i = this[$]()
                  , n = t.splitNumber;
                n = Math.max(parseInt(n, 10), 1),
                t.splitNumber = n;
                for (var r = (i[1] - i[0]) / n; +r[w](e) !== r && 5 > e; )
                    e++;
                t.precision = e,
                r = +r[w](e);
                for (var a = 0, o = i[0]; n > a; a++,
                o += r) {
                    var s = a === n - 1 ? i[1] : o + r;
                    this._pieceList.push({
                        text: this.formatValueText([o, s]),
                        index: a,
                        interval: [o, s]
                    })
                }
            },
            categories: function() {
                var t = this[Ke];
                n.each(t.categories, function(t) {
                    this._pieceList.push({
                        text: this.formatValueText(t, !0),
                        value: t
                    })
                }, this),
                e(t, this._pieceList)
            },
            pieces: function() {
                var t = this[Ke];
                n.each(t.pieces, function(t, e) {
                    n[Ge](t) || (t = {
                        value: t
                    });
                    var i, a = {
                        text: "",
                        index: e
                    };
                    if (null != t.label && (a.text = t.label,
                    i = !0),
                    t.hasOwnProperty("value"))
                        a.value = t.value,
                        i || (a.text = this.formatValueText(a.value));
                    else {
                        var s = t.min
                          , l = t.max;
                        null == s && (s = -1 / 0),
                        null == l && (l = 1 / 0),
                        s === l && (a.value = s),
                        a[o] = [s, l],
                        i || (a.text = this.formatValueText([s, l]))
                    }
                    a.visual = r.retrieveVisuals(t),
                    this._pieceList.push(a)
                }, this),
                e(t, this._pieceList)
            }
        };
        return s
    }),
    e("echarts/component/visualMap/PiecewiseView", [li, "./VisualMapView", si, v, "../../util/symbol", "../../util/layout", "./helper"], function(t) {
        var e = t("./VisualMapView")
          , i = t(si)
          , n = t(v)
          , r = t("../../util/symbol")
          , l = t("../../util/layout")
          , c = t("./helper")
          , h = e[Ze]({
            type: "visualMap.piecewise",
            doRender: function() {
                function t(t) {
                    var r = new n.Group;
                    r.onclick = i.bind(this._onItemClick, this, t.piece),
                    this._createItemSymbol(r, t.piece, [0, 0, d[0], d[1]]),
                    p && r.add(new n.Text({
                        style: {
                            x: "right" === h ? -o : d[0] + o,
                            y: d[1] / 2,
                            text: t.piece.text,
                            textBaseline: "middle",
                            textAlign: h,
                            textFont: u,
                            fill: c
                        }
                    })),
                    e.add(r)
                }
                var e = this.group;
                e[pe]();
                var r = this.visualMapModel
                  , o = r.get("textGap")
                  , s = r.textStyleModel
                  , u = s[ue]()
                  , c = s[le]()
                  , h = this._getItemAlign()
                  , d = r.itemSize
                  , f = this._getViewData()
                  , p = !f.endsText
                  , m = !p;
                m && this._renderEndsText(e, f.endsText[0], d),
                i.each(f.pieceList, t, this),
                m && this._renderEndsText(e, f.endsText[1], d),
                l.box(r.get(a), e, r.get("itemGap")),
                this.renderBackground(e),
                this.positionGroup(e)
            },
            _getItemAlign: function() {
                var t = this.visualMapModel
                  , e = t[Ke];
                if ("vertical" === e[a])
                    return c.getItemAlign(t, this.api, t.itemSize);
                var i = e.align;
                return i && "auto" !== i || (i = "left"),
                i
            },
            _renderEndsText: function(t, e, i) {
                if (e) {
                    var r = new n.Group
                      , a = this.visualMapModel.textStyleModel;
                    r.add(new n.Text({
                        style: {
                            x: i[0] / 2,
                            y: i[1] / 2,
                            textBaseline: "middle",
                            textAlign: "center",
                            text: e,
                            textFont: a[ue](),
                            fill: a[le]()
                        }
                    })),
                    t.add(r)
                }
            },
            _getViewData: function() {
                var t = this.visualMapModel
                  , e = i.map(t.getPieceList(), function(t, e) {
                    return {
                        piece: t,
                        index: e
                    }
                })
                  , n = t.get("text")
                  , r = t.get(a)
                  , o = t.get(b);
                return (r === s ? o : !o) ? e.reverse() : n && (n = n.slice().reverse()),
                {
                    pieceList: e,
                    endsText: n
                }
            },
            _createItemSymbol: function(t, e, i) {
                var n;
                if (this.visualMapModel.isCategory())
                    n = e.value;
                else if (null != e.value)
                    n = e.value;
                else {
                    var a = e[o] || [];
                    n = (a[0] + a[1]) / 2
                }
                var s = this.getControllerVisual(n);
                t.add(r.createSymbol(s[u], i[0], i[1], i[2], i[3], s.color))
            },
            _onItemClick: function(t) {
                var e = this.visualMapModel
                  , n = e[Ke]
                  , r = i.clone(n.selected)
                  , a = e.getSelectedMapKey(t);
                "single" === n.selectedMode ? (r[a] = !0,
                i.each(r, function(t, e) {
                    r[e] = e === a
                })) : r[a] = !r[a],
                this.api[Ee]({
                    type: "selectDataRange",
                    from: this.uid,
                    visualMapId: this.visualMapModel.id,
                    selected: r
                })
            }
        });
        return h
    }),
    e("zrender", ["zrender/zrender"], function(t) {
        return t
    }),
    e("echarts", ["echarts/echarts"], function(t) {
        return t
    });
    var ui = t("echarts");
    return ui.graphic = t("echarts/util/graphic"),
    ui.number = t("echarts/util/number"),
    ui.format = t("echarts/util/format"),
    t("echarts/chart/bar"),
    t("echarts/chart/line"),
    t("echarts/chart/heatmap"),
    t("echarts/component/grid"),
    t("echarts/component/title"),
    t("echarts/component/legend"),
    t("echarts/component/tooltip"),
    t("echarts/component/markPoint"),
    t("echarts/component/markLine"),
    t("echarts/component/dataZoom"),
    t("echarts/component/visualMap"),
    t("echarts/component/toolbox"),
    t("zrender/vml/vml"),
    ui
});
